抽象类的匿名子类
涉及到匿名的东西,都是只用一次,目的就是为了省事!(有时候不一定用,但是为了看得懂代码,这个还是要有所了解的)
1.非匿名类的匿名对象
2.非匿名类的非匿名对象
3.匿名子类的非匿名对象
4.匿名子类的匿名对象
匿名说到底就分为以上四种情况,下面将从程序中弄清楚这四种情况的用法:
package com.java.oop5;
/**
* @description: 抽象类的匿名子类
* 涉及到匿名的东西,都是只用一次,目的就是为了省事!
* 1.非匿名类的匿名对象
* 2.非匿名类的非匿名对象
* 3.匿名子类的非匿名对象
* 4.匿名子类的匿名对象
* @author: Fish_Vast
* @Date: 2021/8/11
* @version: 1.0
*/
public class PersonTest {
public static void main(String[] args) {
show1(new Worker()); //1.非匿名类Worker的匿名对象
System.out.println("******************");
Worker w = new Worker();
show1(w); //2.非匿名类的非匿名对象w
System.out.println("******************");
Person p = new Person() { //3.匿名子类的非匿名对象p
@Override
public void run() {
System.out.println("跑步跑步");
}
@Override
public void breath() {
System.out.println("呼吸呼吸");
}
}; //注意这里是要加分号的!!!
/*因为在抽象方法中不能进行对象的实例化,不能造对象,但是我们假设暂时不知道子类的名字是什么,
*所以借助子类重写方法来实现方法的调用。
*/
show1(p);
System.out.println("******************");
//这里是干脆就连对象名也省去,得从上至下慢慢梳理一遍就能懂其思想了。
show1(new Person(){ //4.匿名子类的匿名对象(最省事!!!)
@Override
public void run() {
System.out.println("跑步");
}
@Override
public void breath() {
System.out.println("呼吸");
}
});
}
public static void show1(Person p){
p.breath();
p.run();
}
}
class Worker extends Person{
@Override
public void run() {
System.out.println("好好运动");
}
@Override
public void breath() {
System.out.println("多呼吸新鲜空气");
}
}
package com.java.oop5;
/**
* @description:
* @author: Fish_Vast
* @Date: 2021/8/11
* @version: 1.0
*/
public abstract class Person {
public Person() {
}
public abstract void run();
public abstract void breath();
}