二十六、内部类
2021/6/24 23:26:48
本文主要是介绍二十六、内部类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、概述
什么是内部类?将一个类 A 定义在另一个类 B 里面,里面的那个类 A 就称为内部类,B 则称为外部类。
2、成员内部类
引入: 在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类Car
中包含发动机类Engine
,这时,Engine
就可以使用内部类来描述,定义在成员位置。
成员内部类: 定义在类中方法外的类,叫做成员内部类。
定义格式:
class 外部类{ class 内部类{...} ... }
3、成员内部类访问特点
创建内部类对象格式:外部类.内部类 对象名 = new 外部类().new 内部类();
访问演示,代码如下:
【定义类】 public class Person { private boolean live = true; private int rate = 60 public void show(){ // 外部类获取内部类变量 Heart h = new Heart(); h.rate; } class Heart { private int rate = 75; public void jump() { int rate = 100; // 直接访问外部类成员 if (live) { System.out.println(rate); // 方法中变量访问 System.out.println(this.rate); // 内部类中变量访问 System.out.println(Person.rate); // 外部类中变量访问 System.out.println("心脏在跳动"); } else { System.out.println("心脏不跳了"); } } } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } } 【定义测试类】 public class InnerDemo { public static void main(String[] args) { // 创建外部类对象 Person p = new Person(); // 创建内部类对象 Person.Heart heart = p.new Heart(); // 调用内部类方法 heart.jump(); // 调用外部类方法 p.setLive(false); // 调用内部类方法 heart.jump(); } } /* 输出结果: 心脏在跳动 心脏不跳了 */
内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的 .class 文件,但是前面冠以外部类的类名和$符号。 比如:Person$Heart.class
访问特点:
- 内部类可以直接访问外部类的成员,包括私有成员
- 外部类访问内部类的成员,必须要建立内部类的对象
- 局部变量直接访问;内部类用 this 访问;外部类用 类名.this 访问
4、局部内部类/匿名内部类
4.1、匿名内部类介绍
- 匿名内部类是一个非常特殊的内部类,从命名可以看出,匿名内部类是没有类名的,因此这个内部类只能用一次。
- 使用场景?匿名内部类一般用于简化代码,当要快速实现一个抽象类或者接口的抽象方法时,我们就可以使用匿名内部类来简化,可以不用专名定义一个有名类来操作。
- 由上述可知,要使用匿名内部类,必须要有一个父类或者父接口
4.2、定义格式
new 类名/接口(){ //如果父类型有抽象方法,需要全部重写 }
特点分析:
- 该匿名内部类 {} 就是某一个类或接口的实现类(子类)
- 整体创建的是子类对象!!!
4.3、匿名内部类的使用
- 直接调用方法
- 作为方法参数传递
- 作为方法的返回值
接口:
interface Flyable{ void fly(); }
① 直接调用方法
new Flyable(){ @Override public void fly(){ System.out.println("不知道什么在飞111111"); } }.fly();
② 当做方法的参数传递
public static void showFlyable(Flyable flyable){ flyable.fly(); }
showFlyable(new Flyable(){ @Override public void fly(){ System.out.println("不知道什么在飞22222222"); } })
③ 当做方法的返回值使用
public static Flyable getFlyable(){ return new Flyable(){ @Override public void fly(){ System.out.println("不知道什么在飞333333"); } } }
这篇关于二十六、内部类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南