写给大忙人看的Java内部类

Java内部类

定义

把类定义在另一个类的内部,该类就被称为内部类。
举例:把类B定义在类A中,类B就被称为内部类。

访问规则

  • 内部类可以直接访问外部类的成员,包括私有。

  • 外部类要想访问内部类成员,必须创建对象。

分类

成员内部类

成员内部类不是静态的

外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

成员内部类是静态的

外部类名.内部类名 对象名 = new 外部类名.内部类名();

局部内部类

局部内部类访问局部变量必须加final修饰:

因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而改变量已经没有了。
为了让该值还存在,就加final修饰。
通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。

匿名内部类

  • 匿名内部类是局部内部类的简化形式

前提

存在一个类或者接口

格式:

new 类名或者接口名() {
重写方法;
}

本质

其实是继承该类或者实现接口的子类匿名对象。

例题

10. class Line {
11. public class Point { public int x,y;}
12. public Point getPoint() { return new Point(); }
13. }
14. class Triangle {
15. public Triangle() {
16. // insert code here
17. }
18. }

在第16行插入哪段代码可以获得一个Point对象的坐标?( )

A. Point p = Line.getPoint();
B. Line.Point p = Line.getPoint();
C. Point p = (new Line()).getPoint();
D. Line.Point p = (new Line()).getPoint();

答案

D

解析

外部类要想访问内部类成员,必须创建对象。
成员内部类非静态时访问:
外部类名.内部类名.对象名 = new 外部类名().new 内部类名();

发布了65 篇原创文章 · 获赞 26 · 访问量 2940

猜你喜欢

转载自blog.csdn.net/weixin_43332735/article/details/104704967