//此处用了匿名内中类
abstract class Fu
{
public abstract void sleep();
}
class Demo
{
public void fun()
{
//创建匿名对象,可以使用匿名类中类
new Fu()
{
public void sleep()
{
System.out.println("睡觉");
}
public void eat()
{
System.out.println("吃饭");
}
}
.sleep();
//创建匿名对象
new Fu()
{
public void sleep()
{
System.out.println("睡觉");
}
public void eat()
{
System.out.println("吃饭");
}
}
.eat();
}
}
class Demonmnbl1
{
public static void main(String[] args)
{
Demo de1 = new Demo();
de1.fun();
}
}
又不是Demo重寫,是裡面的兩個匿名子類別重寫的。 。 Demo只是負責呼叫
Demo並沒有繼承抽象類別。 只是包含了Fu類別的實例。
沒用過JAVA,抽象類別怎麼可能被實例化?這才是值得奇怪的地方。
我覺得 new Fu()應該就相當於 something = new Fu(). 一個繼承了Fu的匿名物件。這也就是OOP裡的多態。
定義匿名內部類的時候,JVM會自動給你生成一個類,說是匿名,其實對於JVM來說,當然不是匿名,JVM知道這個類,而用戶不知道,用戶無法訪問這個類,這個類是你new的類別或介面的子類別或實作類,它的引用是父類別或介面。