(JAVA):四种内部类的细节理解,文字+代码会更好理解—-第三部分重点

一、成员内部类 ☞♥☜ Ⅰ基本介绍 ☛♡☚ Ⅱ使用细节 ☛♡☚ Ⅲ代码实例演示 ☛♡☚ 二、静态内部类 ☞♥☜…

一、成员内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

Ⅱ使用细节 ☛♡☚

Ⅲ代码实例演示 ☛♡☚

二、静态内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

Ⅱ使用细节 ☛♡☚

Ⅲ代码实例演示 ☛♡☚

三、局部内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

Ⅱ使用细节 ☛♡☚

Ⅲ代码实例演示 ☛♡☚

四、匿名内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

Ⅱ使用细节 ☛♡☚

Ⅲ代码实例演示 ☛♡☚

Ⅰ基本介绍 ☛♡☚

1、什么是成员内部类

作为外部类的一个成员存在,是定义在外部类的成员位置,并且没有static修饰,与外部类的属性、方法并列。内部类和外部类的实例变量可以共存。

2、访问方式

在内部类中访问实例变量:this.属性

② 在内部类访问外部类的实例变量:外部类名.this.属性

③ 在外部类的外部访问内部类,使用 out.inner.


Ⅱ使用细节 ☛♡☚

1、内部类作为外部类的成员,可以直接访问外部类的所有成员,包括私有的

2、可以添加任意访问修饰符(public、protected、默认、private),因为成员内部类就相当于一个成员。

3、成员内部类不能定义静态成员,只能定义普通成员或非静态成员

4、注意:

❶ 在外部类可以直接使用 inner s=new inner(); ,因为内部类是外部类的成员,所以可以生成对象。
❷ 而在外部类的外部,要生成(new)一个内部类对象,需要首先建立一个外部类对象(外部类可用),然后再生成一个内部类对象。如:
Outer o=new Outer();
Outer.Inner in=o.new.Inner();

5、创建成员内部类实例时,外部类的实例必须已经存在。

6、当内部类和外部类有同名的成员时,成员内部类可通过 外部类名.this.变量名 访问外部类成员。


Ⅲ代码实例演示 ☛♡☚

㈠ 创建简单的成员内部类

㈡ 其他外部类的第一种访问方式

其他外部类的第二种访问方式

Ⅰ基本介绍 ☛♡☚

1、什么是静态内部类

静态类部类是定义在外部类的成员位置,与成员内部类相似。但是静态内部类有static 关键字修饰,并且静态内部类只能访问外部类的静态成员。

2、静态内部类与成员类部类的区别

生成(new)一个静态内部类不需要外部类成员,静态内部类的对象可以直接生成,如:
Outer.Inner in=new Outer.Inner();

而不需要通过生成外部类对象来生成,并且可以定义私有静态内部类。


Ⅱ使用细节 ☛♡☚

1、可以直接访问外部类的所有静态成员,包含私有,但是不能直接访问非静态成员。

2、可以添加任意访问修饰符(public、protected、默认、private),因为成员内部类就相当于一个成员。和成员内部类一样。

3、静态内部类能定义静态成员,也能定义普通成员或非静态成员。

4、当静态内部类和外部类有同名的成员时,静态内部类可通过 外部类名.变量名 访问外部类成员。


Ⅲ代码实例演示 ☛♡☚

㈠ 其他外部类的第一种访问方式

㈡ 其他外部类的第二种访问方式

Ⅰ基本介绍 ☛♡☚

什么是局部内部类:定义在一个类的成员方法或代码块中的类叫局部内部类。

代码解释:


Ⅱ使用细节 ☛♡☚

1、局部内部类是定义在外部类的局部位置,通常在方法

2、可以直接访问外部类的所有成员,包含私有的

3、不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能其他使用修饰符的,但是可以使用 final 修饰。

4、作用域 : 仅仅在定义它的方法或代码块中

5、 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员名 去访问

6、外部类名.this 的本质就是外部类的对象


Ⅲ代码实例演示 ☛♡☚

Ⅰ基本介绍 ☛♡☚

什么是匿名内部类:

匿名内部类,其实就是匿名的子类而已,只不过它隐藏在.class文件里面你看不到,所以叫匿名内部类!

注意:

匿名内部类既是一个类的定义,同时它本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的的特征。


Ⅱ使用细节 ☛♡☚

1、可以直接访问外部类的所有成员,包含私有的

2、不能添加访问修饰符,因为它的地位就是一个局部变量

3、作用域 : 仅仅在定义它的方法或代码块中

4、如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员名 去访问


Ⅲ代码实例演示 ☛♡☚

匿名内部类:

解析匿名内部类,可以把它分成两个部分:

①先new一个Bell() 对象,同时实体化(就是在{大括号中写属性或方法}),

②调用cellphone类的alarmclock方法 ,传一个参数bell

③而匿名内部类就是把第一步直接放到第二步的参数位置

④ring()方法的调用则是在cellphone类的alarmclock方法中bell.ring()时被调用

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/1975.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部