在进行内部类定义时,也可以通过static关键字来定义,此时的内部类不在受到外部类实例化对象的影响,所以等同于是一个外部类,内部类的名称为“外部类.内部类”。使用static定义的内部类只能够调用外部类中static定义的结构,并且进行内部类实例化的时候也不再需要先获取外部类实例化对象,static内部类实例化格式:
外部类.内部类 内部类对象=new 外部类.内部类();
范例:使用static定义内部类
public class Outer263A {
private static final String MSG="www.lilei.com";//static属性
static class Inner{ //static内部类
public void print() {
System.out.println(Outer263A.MSG); //访问static属性
}
}
}
public class Java260A {
public static void main(String[] args) {
Outer263A.Inner in=new Outer263A.Inner();
in.print();
}
}
执行结果
www.lilei.com
本程序在Outer263A类的内部使Static定义了Inner内部类,这样内部类就成为一个独立的外部类,在外部实例化对象时内部类的完整名称将为Outer.Inner。
范例:使用static定义内部接口
public interface IMessageWarp { //消息包装接口
static interface IMessage{ //定义消息接口
public String getContent(); //【抽象方法】获取消息内容
}
static interface IChannel{ //消息通道接口
public boolean connect(); //【抽象方法】通道连接
}
public static void send(IMessage msg,IChannel chn) {
if(chn.connect()) { //通道已经连接
System.out.println(msg.getContent());
}else {
System.out.println("消息不通");
}
}
}
public class Message implements IMessageWarp.IMessage {
@Override
public String getContent() {
return "www.lilei.com";
}
}
public class Channel implements IMessageWarp.IChannel {
@Override
public boolean connect() {
return true;
}
}
public class Java264 {
public static void main(String[] args) {
IMessageWarp.send(new Message(), new Channel());
}
}
www.lilei.com
注意:实例化内部类对象的格式比较
- 格式1(非static定义内部类):外部类.内部类 内部类对象=new 外部类().new 内部()。
- 格式2(static定义内部类):外部类.内部类 内部类对象=new 外部类.内部类()。
发现:使用static定义的内部类,其完整名称就是“外部类.内部类”,在实例化对象的时候也不再需要先实例化外部类在实例化内部类了。