2016-04-17 5 views
0

次は、fordとHonda(サブクラス)によって継承されているcar(基本クラス)というクラスのコードです。メインクラス(車ではない)では、フォードとホンダのカークラスを継承しているが、可変車をプリントアウトしている。私が直面している問題は、自動車が負の数に設定されていて、このIllegalaArgumentExceptionを表示しない場合です。親クラスのIllegalArgumentExceptionを与えない変数がベースクラスを通過する

public class car{ 
protected long cars; 

public void setCars(long number) { 
    if(cars < 0) 
     throw new IllegalArgumentException("cars must be ≥ 0!"); 
      cars = number ; 
} 
} 

public class honda extends car{ 
public String toString(){ 
    String st = "HONDA" + "no of cars : " + cars ; 
    return st; 
} 
} 

public class main{ 
public static void main(String[] args){ 

    car[] cscar = new car[10]; 
    for(int i = 0; i < 10; i++){ 
     cscar[0] = new honda(-100); 
    } 
} 
} 
+1

[mcve]を入力してください。 –

+0

私は 'setCars()'を指定された値で呼び出すことを希望します – nullpointer

+0

あなたがしていることやあなたのコードがどのように見えるかを知る方法はありません。私は@DanielPrydenに同意します。あなたが真剣に欲しいと助けを必要とするなら、あなたに最高の[mcve]を見せてください。 –

答えて

1

それはあなたが直面している問題は不明ですが、あなたは車の数が負の場合、サブクラスでスローされるIllegalArgumentExceptionを達成したいようです。

は、だからここに動作するはず何:

  1. 機能setCarsは若干変更する必要があります。現在あなたは負の数に車の数を設定して、例外を投げています。代わりにあなたがそれを設定する前に番号を確認してください:

    public void setCars(long number) { 
        if(cars < 0) 
         throw new IllegalArgumentException("cars must be ≥ 0!"); 
    
        cars = number ; 
    } 
    
  2. 私はcarsは、基底クラス内の変数であることを前提としています。したがって、それはプライベートでなければならず、車のクラス内のどこでもsetCars関数を介してのみ設定する必要があります。今までそれを直接設定しないでください:

    public class Car { 
    
        private long cars; 
    
        // ... 
    } 
    
  3. サブクラスはどちらか全くsetCarsを上書きするか、(彼らは上書きする必要がある場合)まず、コール親メソッドべきではありません。

    public class Honda { 
    
        // setCars function is not overwritten here, 
        // so parent function will be called 
    } 
    
    public class Ford { 
    
        // setCars function is overwritten here, 
        // but parent function is called first: 
    
        @Override 
        public void setCars(long number) { 
         super.setCars(number); 
         // if we've got here, then exception was not thrown 
         // so function can do something else 
        } 
    } 
    

あるいは、親機能をpublic final void setCarsに設定して、誰もそれを上書きしないようにすることができます。

上記のコードでは、望ましい結果が得られます。

Honda honda = new Honda(); 
honda.setCars(-5); // will throw the exception 
+0

私はあなたが言ったことをやっていると思いますが、負の値を印刷することはできます。 – maria

+0

あなたのコードの違いは、コンストラクタ( 'new honda(-100)')で 'cars'を開始しようとしていることです。貼り付けたコードにはコンストラクタは表示されませんが、それをしたい場合、コンストラクタは次のようになります: 'public Car(long number){setCars(number);} } 'と' setCars'はこの場合finalでなければなりません –

関連する問題