2017-02-02 8 views
1

私はこれをしばらく理解しようとしていますが、私は様々な質問を検索しましたが、私は近くにいるとは思わない。異なるクラスのtoStringを印刷

私は車のさまざまな詳細を与えるスーパークラスの車両を持っています。私はその後、Vehicleから継承するCarクラスを持っています。

VehicleクラスをオーバーライドするCarクラスからtoStringを出力しようとしています。

基本的には、それぞれの車に関する情報を印刷したいと思います。

はここにある私のメイン

public static void main(String []args) 

    { 

     Car Ford = new Car(Red, 4, true); 

     //Ford = Ford.; Tried various things here to no avail, kept getting nullfalse in output 

     Car Honda = new Car(Blue, 4, false); 


     System.out.println(Ford.vehicleDetails); 

     System.out.println("Honda"); 

    } 

} 

これは私のVehicleクラス

public class Vehicle 

{ 

// Variables 

private String vehicleColour; 

private int numberOfWheels; 

String vehicleDetails; 

// Constructor 

public Vehicle(String vehicleColour, int numberOfWheels) 

{ 

} 

// Getters 

public String getVehicleColour() 

{ 
    return vehicleColour; 
} 

public int getNumberOfWheels() 

{ 
    return numberOfWheels; 
} 



// Setters 

public void setVehicleColour(String vehicleColour) 

{ 
    this.vehicleColour = vehicleColour; 
} 


public void setNumberOfWheels(int numberOfWheels) 

{ 
    this.numberOfWheels = numberOfWheels; 
} 


// Constructor 

public Vehicle() 

{ 

} 


// toString method super 

public String toString() { 

    String vehicleDetails = (getVehicleColour() + "" + getNumberOfWheels()); 

    return vehicleDetails; 

} 

} 

であり、これは「のような

public class Car extends Vehicle 

{ 

    // Variables 

    private boolean convertible; 

    Car vehicleDetails; 

    // Getter 

    public boolean getConvertible() 

    { 
     return convertible; 
    } 

    // Setter 

    public void setConvertible(boolean convertible) 

    { 
     this.convertible = convertible; 
    } 

    // Constructor 

    public Car(String vehicleColour, int numberOfWheels, boolean convertible) { 


    } 


     // toString method override 

     @Override 
     public String toString() { 

     return super.toString() + convertible; 

     } 

    } 

が、私は私の出力が何かになりたい私の車クラスでありますフォードは赤色であり、車輪とはコンバーチブル "で、太字はVehicleクラスとCarクラスからそれぞれ得られます。

太字のテキストを出力するにはどうすればよいですか?今は、null、0、falseなどのデフォルト値を取得するだけです。

私は入力を感謝します。私はおそらく本当に明白な何か本当に愚かなことをしていますが、私はそれを見ることができません。

ありがとうございました。

+0

まず、あなたが私たちに与えたコードはコンパイルされません。 'Vehicle'クラスでは、' vehicleColour'はStringとして定義されますが、 'getVehicleColour()'はdoubleを返そうとします。 –

+0

申し訳ありませんが、投稿を編集しました。 – Keeron

+0

@Keeronは私の答えがあなたに正しければ喜ぶことができますか? –

答えて

1

は、私は私の出力のようなものになりたい「フォードは赤で、4つの車輪を持ち、コンバーチブルである」あなたの上記の要件簡単な解決策について

System.out.println("The Ford is "+ Ford.toString()); 

あなたの場合Ford.toStringから全体の出力を得るつもりなら、Fordオブジェクトを作成するときに車名も渡す必要があります!以下に示すように、コンストラクタの必要な変更を行います!

Car Ford = new Car("Ford","Red", 4, true); 

しかしCarVehicleクラスのコンストラクタは作られていますが、何の値がそれらからローカル変数に代入されていません!したがって.toString()は何も表示されていませんでした!

必要な変更は以下のとおりです。メインクラス内

System.out.println("The Ford is "+ Ford.toString()); 

カークラスで

//change in the constructor 
public Car(String vehicleColour, int numberOfWheels, boolean convertible) { 

    setNumberOfWheels(numberOfWheels); 
    setVehicleColour(vehicleColour); 
    setConvertible(convertible); 

} 

私は私の車のクラスからのtoStringを印刷しようとしています、 Vehicleクラスをオーバーライドします。

//change in toString() 


    @Override 
    public String toString() { 
     if(convertible){ 
      return super.toString() +"and is a convertible" ; 
     }else{ 
      return super.toString() +"and is not a convertible" ; 
     } 


    } 

車クラスで

//change the constructor 
public Vehicle(String vehicleColour, int numberOfWheels) 

{ 
     setNumberOfWheels(this.numberOfWheels); 
     setVehicleColour(this.vehicleColour); 

} 

基本的に私は、それぞれの車についての情報をプリントアウトしたいです。

//change the toString() 
public String toString() { 

    String vehicleDetails = (getVehicleColour() + ", has " +getNumberOfWheels()+" wheels"); 

    return vehicleDetails; 

} 
+0

本当に詳細で有益な応答をありがとう、本当にありがとう!私はコンストラクタクラスの値を設定することは考えていませんでしたが、文字列から値を取ることができると仮定しましたが、デフォルト値を取得して以来、何かが正しくないことが分かりました。再度、感謝します! – Keeron

+0

@Keeronその喜んであなたを助ける! upvoteを与えることを忘れないでください:p –

0

が、私は私の出力は次のようになりたい「フォードは、赤で4つのホイール を持っており、コンバーチブルである」 クラスそれぞれ車と自動車からの太字と、。

これらの単語を含める場合は、それらの単語をtoString()に含めるように指示する必要があります。

たとえば、「4つのホイールがあります」と印刷する場合は、getNumberOfWheels()とするだけではなりません。さもなければ、あなたはちょうど4を得る。"has " + getNumberOfWheels() + " wheels"のような何かをしなければならない。すべての単語を含めるように指示していない場合は、その単語を含めることはできません。

+0

DMさん、ありがとうございました。私はその部分を管理することができました。私は最終結果のために何をしたいのかを人々に伝えたいと思っていました。今は「フォードは**ヌル**、**ホイール**は**フォロー**」のようなものです。 – Keeron

+1

パラメータを取るコンストラクタを作成したにもかかわらず、それらのコンストラクタには、実際にローカル変数をそれらのパラメータに設定するためのコードは含まれていないようです。 'numberOfWheels'をコンストラクタに渡すと、そのコンストラクタはおそらく' this.numberOfWheels'を設定しているはずです(またはそれを行う 'super'コンストラクタを呼び出すこと)。 –

+0

DMに感謝しました。後で分かりやすいように、コンストラクタ内の値を設定します。私はおそらく何かばかげていると言いました!すべての助けに感謝します。 – Keeron

関連する問題