讲讲我对匿名类含义的理解,为什么要整出个匿名类来
文章目录- 核心
- 一、案例一
- 二、案例二
- 总结
核心
匿名类的核心作用即:通过多态创造并使用一个父类的方法(如 一般的子类继承父类、抽象类、接口 里面的空方法)
案例一看不懂直接看案例二!
一、案例一 匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练。 通常情况下,要使用一个接口或者抽象类,都必须创建一个子类。
有的时候,为了快速使用,直接实例化一个抽象类,并“当场”实现其抽象方法。
既然实现了抽象方法,那么就是一个新的类,只是这个类,没有命名。
这样的类,叫做匿名类
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.csdn.net/qq_40990854/article/details/81067371



