2014-03-27 81 views
-2

我知道這個工程:創建擴展其他類內部匿名類

class Main{ 
    public static void main(String[]args){ 
     AbstractClass object = new AbstractClass(){ ... }; 
    } 
} 

它創建了一個對象,具有隱含擴展AbstractClass類(這顯然是abstract)。

但是下面的工作也會如何?

class Main{ 
    public static void main(String[]args){ 
     ConcreteClass object = new ConcreteClass(){ ... }; 
    } 
} 

ConcreteClass是不是abstract的類。

回答

5

十分肯定,這將工作:你延伸到一個匿名類的類並不需要是抽象的 - 它可以是任何final,甚至接口(在這種情況下,你將需要實施其所有方法)。此外,當類是非抽象類時,可以繼承子類而不必重寫它的任何方法。此功能用於所謂的類型安全枚舉模式,在將類enum類引入到Java之前這已經很常見。

+0

值得一提的是,'final'類不能以這種方式擴展。 –

+0

@鄧肯謝謝你的提示! – dasblinkenlight