[英]Java initializing abstract classes
有人可以為我解釋這行代碼嗎?
SomeAbstractClass variable = new SomeAbstractClass() { };
這適當地實例化並將抽象實例存儲在變量中。 怎么了? 可能是一個擴展抽象類的匿名類? 我可以使用任何關鍵字查找有關此信息? (如果有任何相關性,抽象類也恰好是通用的)
上面的一行是創建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
沒有抽象方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.