当前位置: 首页 > news >正文

【Java基础】匿名内部类

🎊专栏【Java基础】

🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。

🎆音乐分享【The truth that you leave】

大一同学小吉,欢迎并且感谢大家指出我的问题🥰

目录

🎁什么是匿名内部类

🎁为什么要使用匿名内部类

🎁详细解释

🏳️‍🌈不使用匿名内部类

🏳️‍🌈使用匿名内部类

🎁书写匿名内部类的格式

🎈方法一

🎈方法二 

🎁匿名内部类的应用例子

🎆题目1

🎈方法一

🎈方法二 

 🎆题目2


🎁什么是匿名内部类

匿名内部类是 Java 编程语言中一种特殊的类,它没有显式地定义类名,而是在创建对象时通过传递实现了某个接口或继承了某个类的代码块来定义类。通常,我们使用它来简化代码、减少类的数量和更高效地编写事件处理程序等。

🎁为什么要使用匿名内部类

在实际开发中,我们常常遇到这样的情况:一个接口/类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类/子类去实现/重写。此时可以使用匿名内部类的方式,可以无需创建新的类,减少代码

🎁详细解释

🏳️‍🌈不使用匿名内部类

比如下面的代码,定义了一个接口,接口里面有一个show方法

public interface Interface01 {void show();
}

 为了使用该接口的show方法,我们需要去创建一个实现类,同时书写show方法的具体实现方式

public class Interface01Impl implements Interface01{@Overridepublic void show() {System.out.println("奋斗5天,期末考试我要过Java");}
}

在上面的代码中,实现类Interface01全程只使用一次,为了这一次的使用要去创建一个类,未免太过麻烦。那么我们可以使用匿名内部类。

🏳️‍🌈使用匿名内部类

public static void main(String[] args) {Interface01 interface01 = new Interface01() {@Overridepublic void show() {System.out.println("奋斗5天,期末考试我要过Java");}};//调用接口方法interface01.show();
}

🎁书写匿名内部类的格式

🎈方法一

这种方法和之前的多态基本上没有区别

new 接口/类名(参数1, 参数2...){实现方法1(){}实现方法2(){}......
};

🎈方法二 

new Thread(new Runnable() {@Overridepublic void run() {System.out.println("奋斗5天,期末考试我要过Java");}
}).start();

🎁匿名内部类的应用例子

🎆题目1

        在程序的show()方法里面定义Father类的匿名子类,重写Father类的method()方法,并在合适的位置调用method()方法

🎈方法一

abstract class Father {int num;public Father(int num) {this.num = num;}public abstract void method();
}class Niming {public void show() {Father father = new Father(10) { // 定义 Father 类的匿名子类@Overridepublic void method() { // 重写 Father 类的 method() 方法System.out.println("Father 类的匿名子类重写了 method() 方法");System.out.println("num 的值为:" + num);}};father.method(); // 在合适的位置调用 method() 方法}
}public class InnerClasssDemo5 {public static void main(String[] args) {Niming niming = new Niming();niming.show();}
}

运行结果

Father 类的匿名子类重写了 method() 方法
num 的值为:10

🎈方法二 

interface InterFace1 {int num = 100;void method();
}class Niming2 {public void show() {InterFace1 interFace1 = new InterFace1() { // 定义实现了 InterFace1 接口的匿名内部类@Overridepublic void method() { // 重写 InterFace1 接口中的 method() 方法System.out.println("InterFace1 接口的匿名内部类重写了 method() 方法");System.out.println("num 的值为:" + num);}};interFace1.method(); // 在合适的位置调用 method() 方法}
}public class InnerClassDemo6 {public static void main(String[] args) {Niming2 niming2 = new Niming2();niming2.show();}
}

 运行结果

InterFace1 接口的匿名内部类重写了 method() 方法
num 的值为:100

 🎆题目2

        在InnnerClassDemo7类的main()方法中使用PersonDemo类的pd对象调用method(Person p)方法,向person接口变量p传递一个匿名子类对象,重写Person接口的study()方法,

package cn.num07;interface Person {void study();
}class PersonDemo {	public void method(Person p) { p.study();}
}public class InnerClassDemo7 {public static void main(String[] args) {PersonDemo pd = new PersonDemo();pd.method(new Person() { // 向 person 接口变量 p 传递一个匿名子类对象@Overridepublic void study() { // 重写 Person 接口的 study() 方法System.out.println("我正在学习Java编程语言");}});}
}

运行结果

我正在学习Java编程语言 


 

 🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰

http://www.lryc.cn/news/69817.html

相关文章:

  • 基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器
  • C++——模板初阶
  • 【TOOLS: Linux与windows及linux与linux之间文件传输常用方法及命令】
  • 【博览群书】《实战大数据》——属于我的第一本大数据图书
  • 【计算机组成原理】实验二
  • hive数据库hql基础操作02
  • 门电路OD门
  • 没有域名,一个服务器Nginx怎么部署多个前端项目
  • 城市内涝的原因和解决措施,内涝监测预警助力城市防涝度汛
  • 8年测试总结,性能测试问题大全,这些问题你应该认清的...
  • RabbitMQ集群安装
  • 面试:link和@import的区别
  • 图片隐写(一)
  • Vivado 下 IP核 之ROM 读写
  • 朗诵素材-《诵四季诗韵,咏师恩师德》
  • CHB-麻省理工学院头皮脑电图数据库
  • 传输层协议
  • 公司新招了个字节拿36K的人,让我见识到了什么才是测试扛把子......
  • pytorch rpc如何实现分物理机器的model parallel
  • APP服务端架构的演变
  • EasyRecovery16适用于Windows和Mac的专业硬盘恢复软件
  • 详解Jetpack Compose中的状态管理与使用
  • 改进YOLOv7 | 头部解耦 | 将YOLOX解耦头添加到YOLOv7 | 涨点杀器
  • 第七章 中断
  • 1116 Come on! Let‘s C(38行代码+详细注释)
  • 深入学习《c语言函数》
  • Pytorch从零开始实现Vision Transformer (from scratch)
  • ES6函数新增了哪些扩展?
  • 【firewalld防火墙】
  • CNNs: ZFNet之CNN的可视化网络介绍