定义
把一个类的定义放在另外一个类的定义中,这就是内部类。
内部类对象的创建
- 非静态内部类
public class Outer {
public class Inner{
}
public static void main(String [] args){
Outer outer = new Outer();
//第一种办法,通过外部类中申明新方法返回内部类实例
Outer.Inner inner = outer.inner();
//第二种方法,通过外部类对象new出内部类实例
Outer.Inner inner1 = outer.new Inner();
}
}
非静态内部类默认持有一个指向外部类的引用,所以它能访问外部类的所有成员(包括private的),实例化的时候也必须由外部类的对象进行实例化。
-
静态内部类(嵌套类)
public class Outer { public Inner inner(){ return new Inner(); } public static class Inner{ } public static void main(String [] args){ Outer outer = new Outer(); //第一种办法,通过外部类中申明新方法返回内部类实例 Outer.Inner inner = outer.inner(); //第二种方法,静态内部类未持有对外部类的引用,可以直接实例化 Outer.Inner inner1 = new Outer.Inner(); } }
笔记:
1,要创建嵌套类的对象,并不一定需要其外部类的对象
2,不能从嵌套类的对象中访问非静态的外部类对象
3,普通内部类不能含有static数据与static字段,也不能包含嵌套类,因为非静态内部类必须由外部类对象生成,static字段没有任何意义,但是嵌套类可以包含所有这些东西。
使用.this和.new
- .this
如果在内部类中需要生成对外部类的引用,可以使用外部类的名字后面紧跟.this。这产生的类型自动具有正确的类型。
public class Outer{
public class Inner{
public Outer outer(){
return Outer.this;
}
}
}
- .new
.new最主要用于实例化内部类对象
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
外部类的好处
外部类能有效解决多重继承的问题