Java内部类的总结
2013-03-22 17:21
393 查看
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个
成员,并且依附于外部类而存在的。内部类可为静态,可用protected和
private修饰(而外部类只能使用public和缺省的包访问权限)。内部类
主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类
为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码
操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外
围类的窗口。使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类
是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有
内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问
题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完
整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
A:成员内部类
作为外部类的一个成员存在,与外部类的属性、方法并列。
成员,并且依附于外部类而存在的。内部类可为静态,可用protected和
private修饰(而外部类只能使用public和缺省的包访问权限)。内部类
主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类
为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码
操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外
围类的窗口。使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类
是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有
内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问
题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完
整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
A:成员内部类
作为外部类的一个成员存在,与外部类的属性、方法并列。
package cn.com.zxx; /** * 成员内部类 * @author acer * 注意:内部类是一个编译时的概念,一旦编译成功,就会成为两个不同的类,对于如下的两个类, * 编译完成后就变为了:outer.class 和 outer$inner.class两个类 */ public class Outer { private static int i =1; private int j =10; private int k =20; public static void outer_f1(){ } public void outer_f2(){ } //成员内部类中,不能定义 //成员内部类中,可以访问外部内中的所有成员 class Inner{ // static int inner_i =100; int i =1; int j =100; void inner_f1(){ System.out.println(i); System.out.println(j); System.out.println(this.j); System.out.println(Outer.this.j); System.out.println(k); outer_f1(); outer_f2(); } } //外部类的非静态方法访问内部成员类 public void outer_f3(){ Inner inner = new Inner(); inner.inner_f1(); } //外部类的静态方法访问内部类 public static void outer_f4(){ Outer outer = new Outer(); Inner inner = outer.new Inner(); inner.inner_f1(); } public static void main(String[] args) { //outer_f4(); //如果要直接创建内部类的对象,不想想当然地认为只需要加上外围内的名字就可以了 //而是必须使用外部内的一个对象来创建一个内部类的对象 Outer outer = new Outer(); Inner inner = outer.new Inner(); inner.inner_f1(); } }