永嘉高端网站建设效果,律师事务所网站建设策划方案,三只松鼠电商网站建设,百度地图开发网站#x1f38a;专栏【Java基础】 #x1f354;喜欢的诗句#xff1a;更喜岷山千里雪 三军过后尽开颜。 #x1f386;音乐分享【The truth that you leave】 大一同学小吉#xff0c;欢迎并且感谢大家指出我的问题#x1f970; 目录 #x1f381;什么是匿名内部类
#x… 专栏【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编程语言 如果大家有不明白的地方或者文章有问题欢迎大家在评论区讨论指正