在进行内部类定义的时候,也可以通过“static”关键字类定义,此时的内部类不再受到外部类实例化对象的影响,所以等同于是一个“外部类”,内部类的名称为“外部类.内部类”。使用static定义的内部类只能够调用外部类中的static定义的结构,并且在进行内部类实例化的时候也不再需要先获取外部类实例化对象,static内部类对象实例化格式如下:
外部类.内部类 内部类对象 = new 外部类.内部类();
1、使用static定义内部类的例子:
package com.mydemo;
public class InnerClassDemo {
public static void main(String[] args) {
// 实例化内部类对象
Outer.Inner oInner = new Outer.Inner();
// 调用方法
oInner.print();
}
}
class Outer {
private static final String MSG = "static定义内部类"; // static属性
// static内部类,这样的内部类就成为了一个独立的外部类,
// 在外部实例化对象时内部类的完整名称将为Outer.Inner。
static class Inner {
public void print() {
// 访问static属性
System.out.println(Outer.MSG);
}
}
}
运行结果:
static定义内部类
2、使用static定义内部接口的例子:
package com.mydemo;
public class InnerClassDemo {
public static void main(String[] args) {
IMessageWrap.send(new DefaultMessage(), new NetChannel());
}
}
// 消息实现子类
class DefaultMessage implements IMessageWrap.IMessage {
/**
* 覆写方法
*
* @return
*/
@Override
public String getContent() {
return "static定义内部接口";
}
}
// 消息通道实现子类
class NetChannel implements IMessageWrap.IChannel {
/**
* 覆写方法
*
* @return
*/
@Override
public boolean isConnet() {
return true;
}
}
// 消息包装接口
interface IMessageWrap {
// 定义消息接口
static interface IMessage {
// 【抽象方法】获取消息内容
public String getContent();
}
// 定义通道接口
static interface IChannel {
// 【抽象方法】通道连接
public boolean isConnet();
}
/**
* 实现消息发送处理,在通道确定后就可有进行消息的发送
*
* @param iMessage
* @param iChannel
*/
public static void send(IMessage iMessage, IChannel iChannel) {
// 通道已连接
if (iChannel.isConnet()) {
System.out.println(iMessage.getContent());
} else {
System.out.println("消息通道无法建立,消息发送失败!!!");
}
}
}
运行结果:
static定义内部接口