//匿名内部类是没有名称的内部类
//new interface/superclass(){//类体},不仅继承了父类还实现了接口,还同时创建该匿名内部类的新实例
public class AnonymousInnerClass {
public static void main(String[] args){
Person p=new Person();
//Animal dog=new Dog();
//p.feed(dog);
p.feed(new Animal(){
public void eat(){
System.out.println("啃骨头");
}
});
p.feed(new Animal(){
public void eat(){
System.out.println("吃鱼肉");//该狗跟上面那条狗不是同一条狗
}
});
p.feed(new Animal(){
public void eat(){
System.out.println("啃骨头");
}
});
Animal dog=new Animal(){
private String name="aa";
public void eat(){
System.out.println("啃骨头");
}
public void show(){//该方法只不过不会输出而已
System.out.println("自己的方法");
}
public void show2(){//该方法只不过不会输出而已
System.out.println(name);
}
};//匿名内部类将对象指向了dog这个引用
p.feed(dog);
//dog.show();父类引用指向子类的对象,无法调用子类特有的方法
p.feed(dog);
new Animal(){
private String name="aa";
{
name="哈哈";
}
/*static{
}匿名内部类中不能使用静态代码块
*/
public void eat(){
System.out.println("啃骨头");
}
public void show(){//该方法只不过不会输出而已
System.out.println(name);
}
}.show();//调用子类特有的方法 哈哈
}
}
class Person{
public void feed(Animal animal){
animal.eat();
}
}
abstract class Animal{
public abstract void eat();
}
/*class Dog extends Animal{
public void eat(){
System.out.println("啃骨头");
}
}*/
interface IAnimal{
public abstract void eat();
}
匿名内部类
最新推荐文章于 2022-07-05 22:52:06 发布