
09-03 Java语言基础(内部类)
发布日期:2021-05-06 23:59:26
浏览次数:27
分类:精选文章
本文共 1541 字,大约阅读时间需要 5 分钟。
Java 内部类详解
1. 内部类的定义
内部类是指在一个类定义的内部定义的类。与外部类不同,内部类可以通过外部类对象的引用访问。内部类的定义方式有多种,主要分为静态成员内部类、非静态成员内部类、局部内部类和匿名内部类。
2. 内部类的访问特点
内部类与外部类之间的访问规则存在一定的特殊性:
- 直接访问外部类成员:内部类可以直接访问外部类的成员,包括私有成员。这意味着无需显式访问权限修饰符。
- 外部类访问内部类成员的方式:外部类需要通过对象引用来访问内部类成员。具体来说,外部类名.内部类名 对象名 = 外部类对象.内部类对象。
- 内部类的可见性:即便内部类是私有的,外部类仍然可以访问它,只需创建内部类对象。
3. 静态成员内部类
静态成员内部类是指在外部类中使用 static
关键字修饰内部类定义的类。这样的内部类具有以下特点:
- 与外部类无关,它的生命周期与外部类相同。
- 可以通过外部类名直接访问,如
Outer.Inner oi = new Outer.Inner();
。 - 静态成员内部类可以访问外部类的静态成员,但不能访问非静态成员。
4. 面试题:变量在控制台输出30,20,10
class Outer { public int num = 10; class Inner { public int num = 20; public void show() { int num = 30; System.out.println(num); // 30 System.out.println(this.num); // 20 System.out.println(Outer.this.num); // 10 } }}class InnerClassTest { public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner(); oi.show(); }}
要实现输出30、20、10,可以使用 Outer.this.num
来获取外部类的 num
值。
5. 局部内部类
局部内部类是指定义在类的成员方法中的内部类。其特点包括:
- 只能在方法的内部定义。
- 必须使用
final
修饰局部变量,否则无法访问。 - 局部内部类的对象可以在方法的内部任意位置创建和使用。
6. 匿名内部类
匿名内部类是一种简化的内部类定义方式。其特点包括:
- 没有类名,可以直接创建对象。
- 实现了接口或继承自类。
- 不能向下类型转换,因为没有类名。
7. 面试题:补齐代码
class Test { public static void main(String[] args) { Outer.method().show(); }}interface Inter { void show();}class Outer { public static Inter method() { return new Inter() { System.out.println("HelloWorld"); }; }}
通过将匿名内部类返回 Inter
接口的实例,实现了 show()
方法的功能。
通过以上内容,可以清晰地理解 Java 内部类的定义、特点和使用方法。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月01日 02时26分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
TDengine使用(一)——TDengine下载与安装
2019-03-05
6.14编一个程序,将两个字符串s1和s2比较,不要用strcmp函数。
2019-03-05
Java纯文本文件显示工具制作
2019-03-05
Unity2D Fixed Joint 2D详解
2019-03-05
三、案例:留言板 & url.parse()
2019-03-05
Python实验26:计算文件MD5值
2019-03-05
LeetCode:28. 实现 strStr()——————简单
2019-03-05
LeetCode:697. 数组的度————简单
2019-03-05
LeetCode:1052. 爱生气的书店老板————中等
2019-03-05
C语言的6大基本数据类型!(学习C语言小白必备!!)
2019-03-05
Nginx配置反向代理与负载均衡
2019-03-05
Lionheart万汇:布林线双底形态分析技巧
2019-03-05
LHCM万汇:在需求上升中,美国贸易赤字创下历史新高
2019-03-05
Mybatis的入门01
2019-03-05
Vue路由嵌套刷新后页面没有重新渲染
2019-03-05
Vue使用bus进行组件间、父子路由间通信
2019-03-05
数据库三个级别封锁协议
2019-03-05
类的实例
2019-03-05
tomcat加载部署webapps目录下的项目
2019-03-05