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