2012-09-19 34 views
0

如果抽象超類具有隻定義初始字段參數的構造函數,並且其中一個子類在其初始化中未使用某個字段參數,我可以簡單地將「null」放在未使用的位置字段參數進入super()調用?對超參數使用null

爲了更清楚地說明這一點,這裏有一個例子:

public abstract class SuperClass { 
    protected int xPos; 
    protected int yPos; 
    protected int zPos; 

    public SuperClass(int xPos, int yPos, int zPos) { 
     this.xPos = xPos; 
     this.yPos = yPos; 
     this.zPos = zPos; 
    } 
    ... getters & setters, etc. 
} 

public class SubClass extends SuperClass { 
    public SubClass(int xPos, int yPos) { 
     super(xPos, yPos, null); 
    } 
} 

這是可以接受的?這是好的編碼習慣嗎?或者有更多的構造函數接受不同類型的參數?

+0

在談論編碼練習之前,您會收到編譯錯誤。只需將其設置爲***明智的***默認值即可。 – nhahtdh

+1

無法將int設置爲'null' ....如果編譯器可以接受,則爲 –

+0

。 – elyashiv

回答

4

您不能將null分配給int類型。

我建議有幾個構造函數。通過這種方式,您可以控制類中的「未初始化」參數,這將簡化維護和可讀性。

0

如果它是原始類型,則設置爲ZERO。您不能設置爲null

3

因爲這是一個原始(int),您不能將其設置爲null

此外,這是一個不錯的設計「氣味」必須做這樣的事情。如果子類不需要超類的某些功能,那麼這裏很有可能顛倒層次結構。一個子類應該是它的父類和其他類的東西。

至少在您列出的示例中,子類似乎應該確實是超類,反之亦然。

+0

如果我沒有爲超類定義一個構造函數,並且在不調用super()的情況下定義子類的構造函數,它可能會更好嗎?這是不錯的設計? – gratsby

+0

看起來更像是兩個班翻了,如果有的話。超類應該是子類,反之亦然。但是,如果你真的不需要,繼承可以給你帶來很多痛苦;也許你應該問你是否只需要兩個無關的類。 – Calum