java - 在這兒并沒有申明FU為Demo的父類,為什么還是可以繼承重寫呢
問題描述
//此處用了匿名內(nèi)中類 abstract class Fu {public abstract void sleep(); } class Demo { public void fun(){//創(chuàng)建匿名對(duì)象,可以使用匿名類中類 new Fu() { public void sleep(){System.out.println('睡覺');} public void eat(){System.out.println('吃飯');}} .sleep(); //創(chuàng)建匿名對(duì)象 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重寫,是里面的兩個(gè)匿名子類重寫的。。Demo只是負(fù)責(zé)調(diào)用
回答2:Demo并沒有繼承抽象類。 只是包含了Fu類的實(shí)例。
沒用過JAVA,抽象類怎么可能被實(shí)例化?這才是值得奇怪的地方。
我感覺 new Fu()應(yīng)該就相當(dāng)于 something = new Fu(). 一個(gè)繼承了Fu的匿名對(duì)象。這也就是OOP里的多態(tài)。
回答3:定義匿名內(nèi)部類的時(shí)候,JVM會(huì)自動(dòng)給你生成一個(gè)類,說是匿名,其實(shí)對(duì)于JVM來說,當(dāng)然不是匿名,JVM知道這個(gè)類,而用戶不知道,用戶無法訪問這個(gè)類,這個(gè)類是你new的類或接口的子類或?qū)崿F(xiàn)類,它的引用是父類或接口。
