内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个
成员,并且依附于外部类而存在的。内部类可为静态,可用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();
- }
- }