Think in java学习笔记-第8章 Inner Classes

来源:互联网 发布:淘宝充话费开店 编辑:程序博客网 时间:2024/04/24 07:09

内部类

“为了访问一个类的所有成员和方法”

一、         什么是内部类

1、  Java 1.1中,可将一个类的定义置入另一个类的定义中,这种处于内部的类就叫作内部类

2、  内部类创建方法

例:Parcel1.java

3、  和外部类不同,Inner class可以声明为privateprotected

二、         方法内部类和作用域内部类

1、  方法内部类:对象在方法外仍然可以使用。方法内部类可以自由使用方法的自变量。

例:Parcel4.java

2、  作用域内部类:在定义它的那个作用域之外,它是不可使用的

例:Parcel4.java

三、          匿名内部类(常用)

1、  什么是匿名内部类?没有名字的内部类。

例:Parcel6.java

2、  匿名类不能拥有一个构造方法

例:Parcel7.java

3、  若试图定义一个匿名内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象为final属性。

例:Parcel8.java

4、  一个实例初始化模块就是一个匿名内部类的构造方法

例:Parcel9.java

四、         static内部类(相当与非static的成员)

1、  static内部类的对象持有创建它的外部类的一个对象的引用。(本质)

2、  想在除外部类非static方法内部之外的任何地方生成非static内部类的一个对象,必须将那个对象的类型设为外部类名.内部类名

例:Parcel2.java

3、  创建非static内部类的对象时,需要外部类的对象。即:除非已拥有外部类的一个对象,否则不可能创建非static内部类的一个对象

例:Parcel11.java

4、  static成员内部类可以自由使用外部类的任何成员变量和成员方法。(常用)

例:Sequence.java

5、  static内部类不可拥有static数据或static内部类。

五、         static内部类(相当与static的成员)

1、  static内部类的对象没有创建它的外部类的一个对象的引用。(本质)

2、  创建static内部类的对象时,不再需要外部类的对象。

例:比较Parcel3.javaParcel10.java

3、  static成员内部类只能使用外部类的static成员变量和成员方法。

4、  static内部类可以成为接口的一部分。

例:IInterface.java

5、  static内部类的一个用途

例:TestBed.java

6、   

六、         内部类和继承

    Inner class可以声明为抽象类 ,因此可以被其它的内部类继承。也可以声明为final的。

 

1、  继承内部类

例:InheritInner.java

结论:

1)       注意子类构造方法的定义

2)       子类没有默认的构造方法。

3)       子类的构造方法的自变量必须有父类的外部类。

4)       子类的构造方法中必须明确的调用父类的构造方法: 父类外部类名.super();

2、  继承外部类时内部类不可以被覆盖

例:BigEgg.java

结论:

一个内部类不能被覆盖――继承一个外部类时,它的内部类不会继续,即内部类不属于子类。

例:BigEgg2.java

结论:子类的内部类可以继承父类的内部类。

七、         内部类标识符

1、      成员内部类的标识符:外部类的名字+$+内部类的名字.class

2、      方法和作用域中的内部类的标识符:外部类的名字+$+数字序号+内部类的名字.class

3、      匿名内部类的标识符:外部类的名字+$+数字序号.class

4、      内部类嵌套于其他内部类: 外部类的名字+$+内部类1的名字+$+内部类2的名字.class

由于它是Java的标准命名机制,所以产生的文件会自动具备与平台无关的能力。

 
原创粉丝点击