2013-12-12 151 views
0

我們不能實例化抽象類,但抽象類可以包含構造函數。抽象類中的構造函數

那麼抽象類中的構造函數的目的是什麼?

+0

這個問題已經在這裏回答http://stackoverflow.com/a/2105793/2817802 – Baby

+0

他們可以繼承。 – wxyz

+0

閱讀全文: [1]:http://stackoverflow.com/questions/2105783/what-is-the-use-of-creating-a-constructor-for-an-abstract-class-in-java – rachana

回答

0

抽象類可以有一些類

父類的構造,即使在子對象創建時被調用的母公司。

休息集思廣益我讓你

1

我們可以實例化一個抽象類的實例,以混凝土子類實例化的程度。當它們被實例化時,JVM將調用構造函數super()。例如,如果你嘗試這種

public abstract class Base { 
    protected Base() { 
    System.out.println("Base"); 
    } 
} 

public class Concrete extends Base { 
    public Concrete() { 
    System.out.println("Concrete"); 
    } 
    public static void main(String[] args) { 
    new Concrete(); 
    } 
} 

你會看到

Base 
Concrete 
1

Constrcutors被使用,主要是初始化數據成員。抽象類也是如此,特別是如果你不想讓繼承類訪問你的私有類。例如:

public abstract class AbstractClass { 
    private int value; 
    public AbstractClass (int value) { 
     this.value = value; 
    } 
} 

public class ConcreteClass extends AbstractClass { 
    public ConcreteClass (int value) { 
     super(value); 
    } 
} 
1

是的,這是事實,你不能初始化直接abstract類的對象,但這個類可以是超一流的,從其中一些其他類延伸,並創建子對象時,父類的構造函數被調用。

你的問題,

那麼什麼是構造函數,抽象類的目的是什麼?

這是很有用的與擴展abstract類就是通常被稱爲初始化部分,如果不放置一個構造函數abstract類,然後編譯器類的一個對象被創建時,一些默認值來初始化參數本身創建一個默認的構造函數。

0

繼承的基本概念是首先實例化超類然後子類。 因此,當我們繼承一個抽象類,讓JVM首先實例化爲超類。 所以對於實例化類的構造函數很有用。