2017-11-10 1 views
0

私は、サブクラス型のオブジェクトを作成すると、year変数が0に初期化されるので、コンストラクタのスーパークラス内にif文を作成する際に問題が発生します。誰かが問題を特定するのを助けてくれますか?スーパークラスのコンストラクタ内で特定の条件を持つにはどうすればいいですか?

public abstract class Ship implements Floatable { 

private String name; 
private int year; 

public Ship(String n, int y) { 
    if(year > 1950) 
     year = y; 
    else 
     year = 0; 
    name = n; 

} 

サブクラスの//コード

public class CruiseShip extends Ship { 

private int maxPsg; //max number of passengers 
public CruiseShip(String name, int year, int max) { 
    super(name, year); 
    maxPsg = max; 
} 
+1

この '(年> 1950の場合) 'は' if(y> 1950) 'でなければなりません。 – tsolakp

答えて

0

あなたはyearが原因それはだという事実のために、デフォルトでゼロに初期化されるとそうでない場合は、条件がtrueになることは決してありませんif(y > 1950)if(year > 1950)を変更する必要がありますインスタンスフィールドここで

2

if(year > 1950)、それはとして宣言されているようyearだけ0に高く評価することができます。

private int year; // 0 value by default 

、あなたはそれを大切にすることはありません。

public Ship(String n, int y) { 
    if(n > 1950) 
     year = y; 
    else 
     year = 0; 
    name = n;  
} 

しかしintフィールドは、デフォルトで0に初期化されているとして、あなたはとてもとして簡素化できます:あなたが書きたい何

はおそらくある

public Ship(String n, int y) { 
    if(n > 1950) 
     year = y; 
    name = n;  
} 
関連する問題