上一篇:了解内部类,请读这份“说明书” | 带你学《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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学