匿名类有两种:
1、与子类有关的匿名类
2、与接口有关的匿名类
1、与子类有关的匿名类
package com.与子类有关的匿名类;
public class Demo29 {
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());
/**
* 这里是与子类有关的匿名类的关键知识点
* 这个匿名类相当与Boy,Gril类,这个是我不需要事先定义这个类,而是我什么时候要用,什么时候写一个匿名类,这种写法代表着其子类
*/
test.test(new Person() {
@Override
void speak() {
System.out.println("与子类有关的匿名类!");
}
});
}
}
package com.与子类有关的匿名类;
public abstract class Person {
abstract void speak() ;
}
package com.与子类有关的匿名类;
public class Boy extends Person {
@Override
void speak() {
System.out.println("Boy");
}
}
package com.与子类有关的匿名类;
public class Gril extends Person{
@Override
void speak() {
System.out.println("gril");
}
}
package com.与子类有关的匿名类;
public class Test {
/**
* 这个类就是纯粹的为了使用多态
*/
void test(Person person) {
person.speak();
}
}
2、与接口有关的匿名类
只要把接口换成子类即可