2015-04-17 65 views
-1

比方說,我有一個類是否應參數在子類或父類中通過

public class Child { 
    public Child(Object arg1) { 
     super(arg1); 
    } 
} 

,我有一個父類

public class Parent { 
    Object object; 
    public Parent(Object arg1) { 
     this.object=arg1; 
    } 
} 

所以我的問題是這將是一個更好的編碼練習

  1. 在孩子中插入參數然後將其傳遞給父母

OR

  • 插入在父本身的參數,而無需通過孩子去。
  • 爲了清楚起見,我們假設目前孩子不需要論證。

    +0

    我認爲第二是更好。 – Turtle

    +0

    以上代碼中父母與孩子之間的關係是什麼? – SMA

    +0

    http://codereview.stackexchange.com/ – dit

    回答

    0

    通過你的代碼的外觀,調用超級會導致錯誤,你需要擴展你的孩子到父母即。

    public class Child extends Parent{ 
    ... 
        } 
    

    既然你創建父構造函數:

    public Parent(Object arg1) 
    

    無arguement構造函數是默認了。 如果父母需要這個對象,那麼當你創建孩子時,你將如何初始化父對象?

    public Child() { 
        super(); //ERROR 
        } 
    

    super()因爲你用一個參數父創建的構造函數現在將無法工作。超級正在尋找Parent()沒有任何爭議

    +0

    是的,抱歉錯過了將Child extends Parent放入代碼片段。父和子是具體類 –

    +0

    @BhagyashreeJog - 是具體類,但父類沒有沒有構造方法的爭論,仍然需要這個。如果孩子不需要和父母需要,當你初始化孩子時,你必須調用父母的設置者來設置對象。 – mel3kings

    1

    如果孩子不需要它,肯定是2。 這是基於有孩子延伸父母。但是,如果Child真的不需要它,那麼你應該把它作爲一個私有字段,並通過一個公共構造函數來設置,否則爲什麼通過Child來初始化這個變量?

    0

    在這裏談論這篇文章沒有意義。在你的情況下,ParentObjectdefault。如果它是private並且您想要初始化ParentObject,則必須致電 Child(Object arg1)。如果ParentObject的訪問權限是publicprotected,這意味着Parent允許Child訪問Object,那麼super.objectsuper(arg1)在這裏沒有區別。因此,也許您需要說明訪問權限的差異,如protectedpublicprivatedefault,請檢查here

    相關問題