簡體   English   中英

Java初始化抽象類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM