/* 匿名内部类特点:
* 1.匿名内部类是没有名称的内部类,没有办法引用它们。必须在创建时,作为new语句
* 的一部分来声明并创建它们的实例。
* 2.匿名匿名内部类必须继承一个类(抽象的、非抽象的都可以)或者实现一个接口。如果父类
* (或者父接口的)是抽象类,则匿名内部类必须实现其所有的抽象方法
* 3.匿名内部类中可以定义代码块,用于实例的初始化,但是不能定义静态代码块
* 匿名内部类语法:
* new interface/superclass(){//类体};
*
* 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,
*并同时创建一个该匿名类的一个新实例。
*
*/
//anonymousInnerC
public class Example {
public static void main(String[] args) {
Person p = new Person();
// Animal dog=new Dog();
// // p.feed(dog);
// p.feed(new Animal() {// 匿名内部类
//
// @Override
// public void eat() {
// System.out.println("啃骨头");
// }
// });
new IAnimal() {
private String name="aa";
{
name="哈哈"; //代码块比属性先进行初始化
}
@Override
public void eat() {
System.out.println("啃骨头");
}
public void show() {
System.out.println(name);
}
}.show();
// p.feed(dog);
// p.feed(dog);
// dog.show();
p.feed(new IAnimal() {// 匿名内部类
@Override
public void eat() {
System.out.println("啃骨头");
}
});
p.feed(new IAnimal() {// 不是同一条狗,因为是new出来的实例化对象
@Override
public void eat() {
System.out.println("吃鱼肉");
}
});
}
}
//abstract class Animal {
// public abstract void eat();
//}
interface IAnimal{
public void eat();
}
// class Dog extends Animal{
// public void eat(){
// System.out.println("啃骨头");
// }
// }
class Person {
public void feed(IAnimal animal) {
animal.eat();
}
}
转载请注明原文地址: https://www.6miu.com/read-18264.html