1. 为了简化书写,和更好地封装,我们通常在适当的时候定义内部类。当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部类事物在使用外部事物的内容。又比如当一个类继承了只有一两个方法的父类或借口,并只是简单的实现了继承到的方法而且只用一两次,就可以定义一个匿名内部来来简化程序。
2. 成员内部类用法:
a) 静态内部类:成员内部类可以作为外部类的成员可以被static修饰,成为静态内部类;如果内部类中有静态成员时,该内部类必须是静态内部类。其用法与外部类的静态成员一样。
i. 当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。
ii. 可以被外部类的静态方法直接访问
iii. 在外部其他类中,如何直接访问static内部类的非静态成员呢?用: new Outer.Inner().function();
iv. 在外部其他类中,如何直接访问static内部类的静态成员呢? Outer.Inner.function();
b) 内部类访问外部类:
i. 内部类可以直接访问外部类的成员,也可以按类和类之间的访问方式访问外部其他类的成员;
ii. 如果外部类,内部类,内部类的方法内都有一个成员变量num,那么在该方法内只写num,访问的是最近的也就是方法内部定义的num;如果想访问用this.num是访问内部类的num;用Outer.this.num是访问外部类的num;如果内部类和内部类方法中都没有重名变量num,则只需写一个num即默认访问外部类的num.
c) 外部类访问内部类:如果内部类时非静态的,必须建立内部类的对象。
i. 外部其他类访问内部类(非私有):如果该内部类非静态,则要new一个该内部类对象,但要用全名,即外部类.内部类 比如: Outer.Inner in = new Outer().new Inner();等号后面是先new了一个外部类对象,再用外部类对象调用内部类构造方法new了一个内部类对象。
3. 局部内部类不可以静态。因为static是用来修饰类的成员的,而方法中的成员都是临时变量或临时常量(比如void k(final int a)是合法的),当然不能有static修饰了。记住:static 是属于类的。
|