吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1591|回复: 2
收起左侧

[Java 转载] Java基础知识·内部类

[复制链接]
宸道移动安全 发表于 2020-8-26 16:07
12.1  内部类介绍
1.概念:内部类(Inner Class),是指将一个类定义在另一个类的内部,内部的类称之为内部类。

2.内部类的四个主要特点:
(1)内部类可以很好实现隐藏,可以使用protected、private修饰符。
(2)内部类可以直接访问外部类的所有成员,包括私有的成员。
(3)外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可访问。
(4)内部类可以解决一些问题,比如:间接地去实现多继承,可以避免修改接口而实现同一个类中两种同名方法的调用。

3.内部类的分四大类:
(1)成员内部类
(2)静态内部类
(3)匿名内部类
(4)局部内部类

12.2  成员内部类及应用
1.成员内部类的特点:
(1)成员内部类属于外部类的实例成员,成员内部类可以有public, private,default,protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用“外部类名.this.成员方法”和“外部类名.this.成员属性的形式。
(2)创建成员内部类的实例使用“外部类名.内部类名实例名 = 外部类实例名.new 内部类构造方法(参数)”的形式。
(3)成员内部类有以下限制成员内部类不能与外部类重名。不能在成员内部类中定义static属性、方法和类(static final形式的常量定义除外)。因为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移到其外部类中去。

2.示例:

图片1.png


12.3  静态内部类及应用
1.静态内部类特点:
(1)使用static修饰的成员内部类叫静态内部类。
(2)静态内部类跟外部类没有任何关系,只是在生成类名和类定义时有影响。静态内部类可以看做是与外部类平级的类。使用方式与外部类平级的类完全相同。
(3)创建静态内部类的实例使用外部类名.内部类名 实例名 = new外部类名.内部 类名(参数)。

2.静态内部类有以下限制:
(1)静态内部类不能与外部类重名。
(2)静态内部类不能访问外部类的非静态的属性和方法。外部类不能访问内部类的非静态的属性和方法。
3.示例:


图片2.png

12.4  匿名内部类及应用
1.匿名内部类特点:
(1)匿名内部类是没有名称的内部类,无法引用。必须在创建时,作为new 语句的一部分来声明并创建它们的实例。
(2)匿名内部类必须继承一个类(抽象的、非抽象的都可以)或者实现一个接口。如果父类(或者父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。
(3)匿名内部类中可以定义代码块,用于实例的初始化,但是不能定义静态代码块。

2.匿名内部类语法:
new interface/superclass()
{
//类体
}
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,并同时创建该匿名类的一个新实例。

3.示例:

图片34.png


12.5  局部内部类及应用
1.局部内部类特点:
(1)定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。
(2)局部内部类访问外部类的属性和方法使用“外部类名.this.属性名”和“外部类名.this.方法名(参数)”的形式。
(3)对外部世界完全隐藏,只能在其作用域内生成对象。

2.局部内部类有以下限制:
(1)局部类不能加访问修饰符。
(2)成员内部类不能与外部类重名。
(3)局部内部类访问作用域内的局部变量,该变量需要使用final修饰。

3.示例:

图片35.png

小结
1、成员内部类(基本掌握):
和成员变量一个位置,在外部类的内部直接定义,可以使用权限修饰符。

2、静态内部类(简单认识即可):成员内部类加上static修饰,就是静态内部类。

3、匿名内部类(语法要求掌握):
       ①没有类名。
      ②匿名内部类只能使用一次。

4、局部内部类(简单认识即可):
(1)和局部变量地位一致。
(2)在方法或代码块中定义。
(3)出了方法就不能使用了:作用域同局部变量。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

若梦丶陌兮 发表于 2020-9-1 12:07
为什么匿名内部类必须继承一个类或者实现一个接口?
老白干了 发表于 2020-9-4 09:44
若梦丶陌兮 发表于 2020-9-1 12:07
为什么匿名内部类必须继承一个类或者实现一个接口?

我觉得,因为你的使用目的,就是不想去写一个单独类来使用?比如集合的排序,有个方法是要求你传一个自定义排序的实现类,你要么自己写一个,要么就使用匿名内部类,这种使用频次较低的地方,个人还是比较喜欢匿名内部类
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表