先看一个例子:
abstract class Person {
public abstract void eat();
}
class Child extends Person {
public void eat() {
System.out.println("eat something");
}
}
public class Demo {
public static void main(String[] args) {
Person p = new Child();
p.eat();
}
}
上面用Child继承了Person类,然后实现了Child的实例,将其向上转型为Person抽象类的引用,而Child类就是我们在匿名内部类中隐藏的类,写成匿名类:
abstract class Person {
public abstract void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
内名类的理解:
Person是抽象类,本身是不能用new来实例化的,同时抽象方法也是不能有方法体的,但是如果要有,则要通过抽象类的子类来创建方法体传给抽象类的对象,这个子类就是匿名类.
再看一个例子:
Dog dog = new Dog(){
@override
public void sleepA(){
System.out.println("Dog->SleepA")
}
//说明:这里Dog是一个抽象类或者接口!!!!!
这里是通过Dog类的子类来创建方法体传给左边的
}