内部类的“独立”-static内部类 | 带你学《Java面向对象编程》之八十四

简介: 本节深入浅出地讲述了static内部类的相关定义与实例化办法,同时展示了比较常用的static定义接口的相关代码。

上一篇:了解内部类,请读这份“说明书” | 带你学《Java面向对象编程》之八十三
【本节目标】
通过阅读本节内容,你将了解到static定义内部类或接口的作用与意义,并学会使用static定义内部类或接口,学会正确地完成相应的实例化。

static定义内部类

如果说现在在内部类上使用了static定义,那么这个内部类就变为了“外部类”,static定义的都是独立于类的结构,所以该类结构就相当于是一个独立的程序类了。需要注意的是,static不管定义的是类还是方法只能够访问static成员,所以static定义的内部类只能够访问外部类中的static属性或方法。
范例:使用static定义内部类

class Outer {
    private static final String MSG = "www.mldn.cn" ;
    static class Inner {
        public void print(Outer.MSG) {
            System.out.println(Outer.MSG) ;
        }
    }
}

这个时候的Inner类是一个独立的类,如果此时要想产生实例化Inner类对象,只需要根据“外部类.内部类”的结构实例化对象即可。格式如下:

外部类.内部类 内部类对象 = new 外部类.内部类() ;

这个时候的类名称带有“.”。

范例:实例化static内部类对象

public class JavaDemo{
    public static void main(String args[])  {
        Outer.Inner in = new Outer.Innter() ;
        in.print() ;
    }        
}

以后在开发之中如果发现类名称上提供有“.”首先应该立刻想到这是一个内部类的结构,如果可以直接进行实例化,则应该立刻认识到这是一个static定义的内部类。
如果以static定义内部类的形式来讲并不常用,static定义内部接口的形式最为常用。
范例:使用static定义内部接口

interface IMessageWarp {    //消息包装
   static interface IMessage {
       public String getContent() ;
   }
   static interface IChannel {
       public boolean connect() ;          //消息的发送通道
   }
   public static void send(IMessage msg ,IChannel channel) {       //消息发送
       if (channel.connect()) {
            System.out.println(msg.getContent()) ;                        //www.mldn.cn
       }else {
            System.out.println("消息通道无法建立,消息发送失败!") ;
       }
   } 
}
class DefaultMessage implements IMessageWarp.IMessage {
    public String getContent() {
        return "www.mldn.cn" ;
    }
}
class NetChannel implements IMessageWarp.IChannel {
    public boolean connect() {
        return true ;
    }
}
public class JavaDemo{
    public static void main(String args[])  {
        IMessageWarp.send(new DefaultMessage() ,new NetChannel() ) ;
    }
}

之所以使用static定义内部接口,主要是因为这些操作是属于一组相关的定义,有了外部接口之后,可以更加明确的描述出这些接口的主要功能。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

更多Java面向对象编程文章查看此处

相关文章
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
37 7
|
3月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
46 5
|
5天前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
17天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
22 3
|
24天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
20 5
|
30天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
129 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
2月前
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
|
28天前
|
Java 编译器
【Java】内部类
【Java】内部类
19 0
|
存储 Java 数据库
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(中)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(中)
63 1
|
Java 编译器
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
62 1
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)