讲讲我对匿名类含义的理解,为什么要整出个匿名类来
核心
匿名类的核心作用即:通过多态创造并使用一个父类的方法(如 一般的子类继承父类、抽象类、接口 里面的空方法)
案例一看不懂直接看案例二!
一、案例一
匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练。 通常情况下,要使用一个接口或者抽象类,都必须创建一个子类。有的时候,为了快速使用,直接实例化一个抽象类,并“当场”实现其抽象方法。
既然实现了抽象方法,那么就是一个新的类,只是这个类,没有命名。
这样的类,叫做匿名类
public abstract class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public abstract void attack();
public static void main(String[] args) {
ADHero adh=new ADHero();
//通过打印adh,可以看到adh这个对象属于ADHero类
adh.attack();
System.out.println(adh);
Hero h = new Hero(){
//当场实现attack方法
public void attack() {
System.out.println("新的进攻手段");
}
};
h.attack();
//通过打印h,可以看到h这个对象属于Hero$1这么一个系统自动分配的类名
System.out.println(h);
}
}
仍然没理解的不要着急,直接看案例二
二、案例二
代码如下(示例),仔细看注释!:
public static void main(String args[]) {
Test test = new Test();
Person person = new Boy();
test.test(person);
person = new Gril();
test.test(person);
test.test(new Boy());
// 就是下面这里!
// 虽然写了个new Person()但实现了匿名类,作用上和Girl()Boy()相同
// 相当于生成了子类(但匿名了!)此处的方法重写,都是多态
test.test(new Person() {
@Override
void speak() {
System.out.println("与子类有关的匿名类!");
}
});
}
总结
本质上考的仍然是多态,复习一下多态:
1.父类引用指向子类对象
2.对父类方法的重写
参考:
https://how2j.cn/k/interface-inheritance/interface-inheritance-inner-class/322.html?p=282949
https://blog.youkuaiyun.com/qq_40990854/article/details/81067371
本文深入探讨了匿名类的概念,强调其在多态中的核心作用,通过实例解析如何利用匿名类快速实现抽象方法。文章提供了两个案例,帮助读者理解匿名类的本质——无名的子类,用于临时实现接口或抽象类的功能。总结部分重申了匿名类与多态的紧密联系。
942

被折叠的 条评论
为什么被折叠?



