2012-11-29 162 views
1

如何從第二個和第三個獲取子構造函數? 由於 公共抽象最初不起作用?抽象構造函數java

public abstract class First { 

    public Point position; 

    public First() {} //how do i make this constructor like an abstract? 
         // so that it will go get Second constructor or Third 
} 

public class Second extends First { 

    public Second (Point x) { 
     position = x; 
    } 
} 

public class Third extends First { 

    public Third(Point x) { 
     position = x; 
    } 
} 
+0

在這裏看到:[http://stackoverflow.com/a/260755/1083946](http://stackoverflow.com/a/260755/1083946) –

回答

1

當創建一個SecondThird對象,程序員必須使用該類定義的構造函數之一。

First構造函數將被隱式調用,如果你沒有明確使用super。不需要使其變爲抽象的,你可以將其保留爲空或者只是不定義它(Java將假設隱含的默認構造函數,它沒有參數並且不執行任何操作)。

+0

如果我想打一個 新的第一什麼(X,Y); 在'頭等艙'的方法裏面,這可能嗎? – Bohn

+0

如果'First'類是'abstract',則不能創建它的任何實例(這就是'abstract'的含義)。所以無論參數是什麼,你都無法執行新的First()。如果你定義了一個非默認的構造函數(一個帶參數的構造函數)並且沒有定義默認的構造函數(沒有參數),你將不得不從子類的構造函數中顯式調用super(x,y)。 – SJuan76

1

Java不允許您訪問抽象類中抽象類派生的具體類的構造函數。但是,您可以從具體類中調用超類(抽象類)構造函數。

public abstract class First{ 

    public Point position; 

    public Plant(Point x) { 
     this.position = x; 
    } 
} 

public class Second extends First { 

    public Second(Point x) { 
     super(x); 
    } 
} 
+0

非常感謝,真的很讚賞你的努力。 – Bohn

+0

@波恩希望它能幫助一些人,這個例子有幫助嗎?你還有別的問題嗎? –