2017-08-04 8 views
0

自転車の例をコピーして車の例に変更したいが、実行するPolyCarクラスの拡張クラスMountainBokeを取得できない。私がマウンテンバイクをコメントアウトすると、PolyCarが実行されます。プログラムはマウンテンバイクJavaでポリモーフィズムのコード例を実行するのに問題がある

を認識しない、なぜ誰もがここにここに私のPolyCarプログラムを実行するために

//import PolyCar.MountainBike; 
//import PolyCar.RoadBike; 

public class TestCars { 
     public static void main(String[] args){ 
     PolyCar bike01, bike02, bike03; 

     bike01 = new PolyCar(20, 10, 1); 
     bike02 = new MountainBike(20, 10, 5, "Dual"); 
//  bike03 = new RoadBike(40, 20, 8, 23); 

     bike01.printDescription(); 
     bike02.printDescription(); 
//  bike03.printDescription(); 
     } 
    } 

を使用TestCarプログラムは、私のPolyCarコードが

public class PolyCar { 

    // the PolyCar class has three fields 
    public int cadence; 
    public int gear; 
    public int speed; 

    // the PolyCar class has one constructor 
    public PolyCar(int startCadence, int startSpeed, int startGear) { 
     gear = startGear; 
     cadence = startCadence; 
     speed = startSpeed; 
    } 

    // the PolyCar class has four methods 
    public void setCadence(int newValue) { 
     cadence = newValue; 
    } 

    public void setGear(int newValue) { 
     gear = newValue; 
    } 

    public void applyBrake(int decrement) { 
     speed -= decrement; 
    } 

    public void speedUp(int increment) { 
     speed += increment; 
    } 
public void printDescription(){ 
    System.out.println("\nBike is " + "in gear " + this.gear 
     + " with a cadence of " + this.cadence + 
     " and travelling at a speed of " + this.speed + ". "); 
} 
public class MountainBike extends PolyCar { 
    private String suspension; 

    public MountainBike(
       int startCadence, 
       int startSpeed, 
       int startGear, 
       String suspensionType){ 
     super(startCadence, 
       startSpeed, 
       startGear); 
     this.setSuspension(suspensionType); 
    } 

    public String getSuspension(){ 
     return this.suspension; 
    } 

    public void setSuspension(String suspensionType) { 
     this.suspension = suspensionType; 
    } 

    public void printDescription() { 
     super.printDescription(); 
     System.out.println("The " + "MountainBike has a" + 
      getSuspension() + " suspension."); 
    } 
} 
public class RoadBike extends PolyCar{ 
    // In millimeters (mm) 
    private int tireWidth; 

    public RoadBike(int startCadence, 
        int startSpeed, 
        int startGear, 
        int newTireWidth){ 
     super(startCadence, 
       startSpeed, 
       startGear); 
     this.setTireWidth(newTireWidth); 
    } 

    public int getTireWidth(){ 
     return this.tireWidth; 
    } 

    public void setTireWidth(int newTireWidth){ 
     this.tireWidth = newTireWidth; 
    } 

    public void printDescription(){ 
     super.printDescription(); 
     System.out.println("The RoadBike" + " has " + getTireWidth() + 
      " MM tires."); 
    } 
} 

} 
+0

をコメントアウトすることになっimport文はありますか? – Jite

+1

各クラスを独自のクラスファイルに抽出します。 – JimmyB

答えて

0

ですあなたはマウンテンバイクを持って教えてもらえますし、あなたのPolyCarクラスの範囲にあるRoadBike。

論理的なやり方は、それらを取り除くことです(MountainBike定義の前にブレースを置き、RoadBikeクラスの最後のものを削除します)。または、MountainBikeクラスとRoadBikeクラスを静的にし、bike02 = new PolyCar.MountainBike(20,10,5、 "Dual")のように初期化します。ネストしたクラスとしてそれらを置くことの背後にはロジックがないので、あなたが相続&ポリモーフィズムを達成しようとすると、ネストされたは、「組成物」の関係のようなものを表しているよう

2番目のオプションは、私の意見では悪いです。あなたがMountainBikePolyCarクラス内にカプセル化RoadBikeを持って

+0

ありがとうございました。とても役に立ちました。私のプログラムは稼動しています – Elmore

+0

ブラケットの場所を変更します – Elmore

+0

@エルモアようこそ。投稿があなたが期待していたものであれば、その答えを検証することによってサポートすることを忘れないでください;) – Maaaatt

1

。それらは別々のクラスファイルになければなりません。あなたの解決策は、他の2つのサブクラスを宣言する前に、最後の中括弧を移動させてPolyCarクラスを終了するのと同じくらい簡単です。

あなたが持っている瞬間:

public class PolyCar 
{ 
    ... 
    public class MountainBike extends PolyCar{ 
     ... 
    } 

    public class RoadBike extends PolyCar{ 
     ... 
    } 
} 

変更するには:

class PolyCar { 
    ... 
} 

class RoadBike extends PolyCar{ 
    .... 
} 

class RoadBike extends PolyCar{ 
    ... 
} 

ワーキングTutorialsPoint例here

関連する問題