匿名内部类

//匿名内部类是没有名称的内部类
//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();
}
	
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值