有人可以爲我解釋這行代碼嗎?Java初始化抽象類
SomeAbstractClass variable = new SomeAbstractClass() { };
這正常instantiaties和變量存儲抽象的實例。發生什麼事?也許是一個擴展抽象類的匿名類?我可以使用任何關鍵字查找關於此的信息? (抽象類也恰好是通用的,如果它有相關性的話)
有人可以爲我解釋這行代碼嗎?Java初始化抽象類
SomeAbstractClass variable = new SomeAbstractClass() { };
這正常instantiaties和變量存儲抽象的實例。發生什麼事?也許是一個擴展抽象類的匿名類?我可以使用任何關鍵字查找關於此的信息? (抽象類也恰好是通用的,如果它有相關性的話)
上面這行代碼創建了一個匿名子類SomeAbstractClass
,它不會是abstract
。當然,這隻有在基類沒有實現abstract
方法時纔有效。實際上,除非您正在實現和/或覆蓋花括號之間的方法,否則我無法想象上面這一行的有用實例(除了「文檔」功能,請參閱下面的註釋)。如果基類/接口碰巧實現的方法很少,並且實現很簡單,那麼這是一種非常常見的技術。你甚至可以參考周圍方法和參數的變量final
,從而做出關閉。
您正在創建一個匿名類,它是您的abstract
類的子類。就像在評論中指出的那樣,你正在尋找一個匿名擴展。
喜歡的東西如下會工作,如果你有abstract
方法來實現:
MyAbstractClass someObjectOfThatClass = new MyAbstractClass(){
@Override
public void someAbstractMethod(){
}
}
你可以做同樣的接口,它們還可以包含abstract
方法。一個實際的例子是添加ActionListener
到JButton
:
myJButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
// code
}
});
請格式化您的代碼。 –
工作吧! –
並刪除無意義的「匿名」參考。 –
的Java爲您提供了在線創建匿名子類的能力。您經常在具有Swing事件處理的匿名內部類的上下文中看到這一點,但也有許多其他應用程序。
在您的示例中,您將創建一個匿名擴展SomeAbstractClass
並將其分配給SomeAbstractClass
引用的類。就像如果你創建了一個單獨的類像這樣
public class SomeConcreteClass extends SomeAbstractClass {
}
,後來做了這個
SomeAbstractClass variable = new SomeConcreteClass();
正如@Stefano指出這將是,如果你的匿名混凝土類沒有抽象方法你的方法只能,這是真的,因爲SomeAbstractClass
沒有抽象方法。
你的問題中的關鍵字是匿名的,並延伸。 –