2011-03-30 122 views
0

可能重複:
What is the use of creating a constructor for an abstract class in Java?抽象類中構造函數的用法是什麼?

例子:

abstract public class AbstractDemo 
{ 
    private int ab; 
    public AbstractDemo() 
    { 
     ab=10; 
    } 

    public int getAb() 
    { 
     return ab; 
    } 

    public void abstractMethod() 
    { 
     //On the line below it gives error. 
     AbstractDemo demo=new AbstractDemo(); 
    } 

} 

編輯,以格式代碼

+0

希望它是重複的問題,我問這個已經[鏈接] http://stackoverflow.com/questions/5404168/constructors-in-abstract-classes – developer 2011-03-30 06:18:47

+0

HTTP:// stackoverflow.com/questions/504977/why-cant-i-create-an-abstract-constructor-on-an-abstract-c-class – 2011-03-30 06:19:17

+0

這是一個確切的重複?問題是他直接抽象基類的實例化。事實上,它甚至不像提及的問題一樣的語言! – 2011-03-30 06:27:04

回答

2

在我看來,抽象類中的構造函數可以做一些初始化工作,所有的子類都不需要在自己的構造器中重複。

+0

+1。我們只需要抽象類中的構造函數來完成一般操作。 @Dinesh:我們不能在抽象類中使用'new',這就是爲什麼你有錯誤。 – 2011-03-30 06:23:43

2

你不能讓一個文摘實例行爲班。當你有一個實現類的構造函數時,你可以調用它(隱式地或者使用super.),並且你可以把代碼放在那裏,當一個實例被創建時應該被執行。

0

構造函數用於在創建該類的實例時初始化該對象的字段。這對於一個抽象類來說沒有什麼不同。雖然不能直接創建Abstract類的實例,但可以創建從抽象類派生的具體類的實例。

1

批評的代碼:

抽象基類(ABC)不能直接實例化 - 因此術語摘要。因此,Java在語法上不正確:

AbstractDemo demo=new AbstractDemo(); 

您需要將其替換爲其他值,或者完全刪除該方法。

使用構造函數:

當你實例,從這個抽象基類繼承的類,你可以調用抽象基類的構造函數分配專用的ABC任何屬性。

如:

public class DerivedDemo extends AbstractDemo { 

    public DerivedDemo (int a, int b) { 

     super(); //calls constructor 
    } 
}