JAVA 匿名内部类 【小白快速理解】
匿名内部类
1.定义
匿名:没有名字。内部类:在其他类内部的类。即,没有名字的子类对象、或者接口的实现类对象。
目的:在不定义子类的情况下创建Animal的子类对象,就可以使用匿名内部类。
把子类继承父类,重写父类中的方法,创建子类对象,合成了一步完成,减少了其中创建子类的过程。或者将实现类实现接口,重写接口中的方法,创建实现类对象,合成了一步完成,减少了其中创建实现类的过程。
匿名内部类在编写代码时没有名字,编译后系统会为自动为匿名内部类生产字节码,字节码的名称会以 外部类$1.class 的方法命名
2.匿名内部类的格式:
父类/接口 对象 = new 父类/接口(参数值){
@Override
重写父类/接口的方法;
}
流程:
1.定义一个抽象类(父类)
abstract class Animal{
public abstract void cry();
}
2.使用匿名内部类,直接重写父类的方法,省去创建子类继承父类的过程和创建子类对象的过程
public class Test {
public static void main(String[] args) {
// 目标:认识匿名内部类,并掌握其作用。
// Animal a = new Cat();
// a.cry();
// 1、把这个匿名内部类编译成一个子类,然后会立即创建一个子类对象出来。
Animal a = new Animal(){
@Override
public void cry() {
System.out.println("猫喵喵喵的叫~~~");
}
};
a.cry();
}
}
1.传统方式实现接口:
package com.hspedu.innerclass;
/**
* 演示匿名内部类的使用
*/
public class AnonymousInnerClass01 {
public static void main(String[] args) {
Outer04 outer04 = new Outer04();
outer04.method();
}
}
class Outer04 { //外部类
private int n1 = 10;//属性
public void method() {//方法
//基于接口的匿名内部类
//1.需求:想使用接口IA,并创建对象
//2.传统方式:实现该接口,并创建对象实例
IA tiger = new Tiger();//接口的多态
tiger.cry();
}
}
interface IA {//接口
public void cry();
}
class Tiger implements IA{//重复
@Override
public void cry() {
System.out.println("老虎叫唤...");
}
}
2.使用匿名内部类进行简化:
package com.hspedu.innerclass;
/**
* 演示匿名内部类的使用
*/
public class AnonymousInnerClass01 {
public static void main(String[] args) {
Outer04 outer04 = new Outer04();
outer04.method();
}
}
class Outer04 { //外部类
private int n1 = 10;//属性
public void method() {//方法
//基于接口的匿名内部类
//1.需求:想使用接口IA,并创建对象
//2.传统方式:,实现该接口,并创建对象实例
//3.需求:Tiger/Dog类只使用一次,以后再也不使用
//4.使用匿名内部类简化开发
// IA tiger = new Tiger();//接口的多态
// tiger.cry();
IA tiger = new IA(){ //重点是这里
@Override
public void cry() {
System.out.println("老虎叫唤...");
}
};
tiger.cry();
}
}
interface IA {//接口
public void cry();
}
参考:
[1]: https://blog.csdn.net/cao124383050/article/details/102862120
[2]: https://blog.csdn.net/yang_guang3/article/details/133298411
[3]:https://blog.csdn.net/wjkqq0921/article/details/130118631?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-130118631-blog-133298411.235%5Ev43%5Epc_blog_bottom_relevance_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-130118631-blog-133298411.235%5Ev43%5Epc_blog_bottom_relevance_base3&utm_relevant_index=2
(感谢大佬的优质文章,让我受益颇多,遂记录下来)
标签:JAVA,内部,void,cry,小白,接口,匿名,public From: https://blog.csdn.net/m0_52065616/article/details/144185886