内部类简单描述:
内部类:
外部类: 宿主类
内部类: 嵌套类
1. 非静态内部类 : 内部类没有使用 static 修饰, 此时 内部类属于 外部类的一个对象,也就是说创建内部类对象之前应该先创建外部类对象
外部类 out = new 外部类();
外部类.内部类 in = out.new 内部类();
2. 静态内部类 : 内部类使用了 static 修饰,此时内部类属于 外部类,也就说,外部类可以直接调用内部类
外部类.内部类 in = new 外部类.内部类();
3. 局部内部类, 在方法里创建类
4. 局部内部类的一个特殊, 匿名内部类:
没有名字的局部内部类,只能用一次
1. 不能是抽象类
2. 没有构造方法
示例分析:
public class DotNew {
//定义一个非静态的内部类
public class Inner {}
public static void main(String[] args) {
DotNew dn = new DotNew();
//在没有创建外部类的对象时,是不能创建内部类的
//因为内部类对象会暗暗的连接到创建它的外部类对象上
//如果Inner是static 则下面这种初妱化方法是错的
DotNew.Inner dni = dn.new Inner();
//下面这种方法是错的,因为非静态内部类必须链接到一个外部类对象上
//不过,如果 Inner 是 static 的,下面这种初始化方法是对的
//DotNew.Inner dni2 = new Inner();
}
}
public void run(){} //注意是 public
但是,在很多时候,我们希望这个Runnable只是在类的内部使用;即,实现一个内部线程.
这样就存在着一种风险,在类的外部也可以使用这个接口实现的功能了.
在这种时候,使用内部类就是一个很好的选择了.
因为内部类在外部是不能实例化的.