java - 在這兒并沒有申明FU為Demo的父類,為什么還是可以繼承重寫呢
問題描述
//此處用了匿名內中類 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();} }
問題解答
回答1:又不是Demo重寫,是里面的兩個匿名子類重寫的。。Demo只是負責調用
回答2:Demo并沒有繼承抽象類。 只是包含了Fu類的實例。
沒用過JAVA,抽象類怎么可能被實例化?這才是值得奇怪的地方。
我感覺 new Fu()應該就相當于 something = new Fu(). 一個繼承了Fu的匿名對象。這也就是OOP里的多態。
回答3:定義匿名內部類的時候,JVM會自動給你生成一個類,說是匿名,其實對于JVM來說,當然不是匿名,JVM知道這個類,而用戶不知道,用戶無法訪問這個類,這個類是你new的類或接口的子類或實現類,它的引用是父類或接口。
