2013-04-23 63 views
0

對不起,如果這是有點令人困惑,第一次使用本網站,所以我不知道我是否正確輸入我的代碼。所以我的問題是,當我運行這個程序的類驅動程序我得到這個:如何添加輸入到繼承

name: No Name Yet 
Manufacturer: no name yet 
Engine Cyclinders: 0 
Load: 0.0 
Towing: 0.0 

這是默認的,現在我想可以把輸入的類驅動程序,這將改變說這個名字例如,我將其設置爲Person。我嘗試過使用p.setName("Tim"),但如果我撥打Personwriteouput方法,它只會顯示名稱tim。如果我打電話給班級卡車writeoutput,那麼它說沒有名字。我把writeoutput放在超級,但我不知道我做錯了什麼。任何幫助,將不勝感激

public class Person { 

    private String name; 

    public Person() 
    { 
     name = "No Name Yet"; 
    } 
    public Person(String initialName) 
    { 
     name = initialName; 
    } 
    public void setName(String newName) 
    { 
     newName = "tim"; 
     name = newName; 
    } 
    public String getName() 
    { 
     return name; 
    } 
    public void writeOutput() 
    { 
     System.out.println("name: " + name); 
    } 
    public boolean hasSameName(Person otherPerson) 
    { 
     return this.name.equalsIgnoreCase(otherPerson.name); 
    } 

} 
public class Vehicle extends Person { 

    String manufactName; 
    int engine; 



    public Vehicle() 
    { 
     manufactName = "no name yet"; 
     engine = 0; 
    } 
    public Vehicle(String initialManufactName, int initialEngine) 
    { 
     manufactName = initialManufactName; 
     engine = initialEngine; 
    } 
    public void setManufactName(String newManufactName) 
    { 
     manufactName = newManufactName; 
    } 
    public void setEngine(int newEngine) 
    { 

     engine = newEngine; 
    } 
    public String getManufactName() 
    { 

     return manufactName; 
    } 
    public double getEngine() 
    { 
     return engine; 
    } 
    public void writeOutput() 
    { 
     super.writeOutput(); 
     System.out.println("Manufacturer: " + manufactName); 
     System.out.println("Engine Cyclinders: " + engine); 
    } 
    public boolean hasSameManufactName(Vehicle otherVehicle) 
    { 
     return this.manufactName.equalsIgnoreCase(otherVehicle.manufactName); 
    } 
    public boolean hasSameEngine(Vehicle otherVehicle) 
    { 
     return this.engine == (otherVehicle.engine); 
    } 
} 

public class Truck extends Vehicle { 

    private double load; 
    private double towing; 

    public Truck() 
    { 
     load = 0; 
     towing = 0; 
    } 
    public Truck(double initialLoad, double initialTowing) 
    { 
     load = initialLoad; 
     towing = initialTowing; 
    } 
    public void setLoad(double newLoad) 
    { 
     load = newLoad; 
    } 
    public void setTowing(double newTowing) 
    { 
     towing = newTowing; 
    } 
    public double getLoad() 
    { 
     return load; 
    } 
    public double getTowing() 
    { 
     return towing; 
    } 
    public void writeOutput() 
    { 
     super.writeOutput(); 
     System.out.println("Load: " + load); 
     System.out.println("Towing: " + towing); 
    } 
    public boolean hasSameLoad(Truck otherTruck) 
    { 
     return this.load == (otherTruck.load); 
    } 
    public boolean hasSameTowing(Truck otherTruck) 
    { 
     return this.towing == (otherTruck.towing); 
    } 
} 

public class Driver extends Truck{ 
    public static void main(String[] args){ 
     Person p = new Person(); 
     Vehicle v = new Vehicle(); 
     Truck t = new Truck(); 
     t.writeOutput(); 
    } 

}

+1

我會擔心這個聲明'newName =「tim」;'在你的'Person's'setName'方法中 – MadProgrammer 2013-04-23 00:28:59

+0

哎呀,我忘了拿出來之前我發佈它。 newName =「tim」;不在代碼中了。我只是嘗試不同的事情,看看我能上班 – Snobbysteven 2013-04-23 00:31:38

+0

發佈代碼時,如果您可以縮小到相關部分,它會有所幫助。它使您的問題更具可讀性,並可讓您更快速地做出迴應。 – 2013-04-23 00:40:46

回答

0

你並不需要在層次結構中創建的每個類的一個實例。

嘗試:

Truck t = new Truck(); 
t.setName("tim"); 
t.writeOutput(); 

而且,你的設計是奇數:車輛通常不會繼承一個人,和驅動程序通常不會繼承一個卡車。一個Driver將是Person的一個子類。一輛卡車將是一輛車的一個子類,一輛車將擁有一輛車。

+0

它工作正常,如果我這樣做,但我覺得即時通訊不使用繼承,如果我這樣做。這就是問題所在: – Snobbysteven 2013-04-23 00:43:09

+0

創建一個名爲Vehicle的基類,其中包含製造商名稱(類型String),引擎中的柱面數量(類型爲int)和所有者(在代碼8.1中給出的類型Person)。然後創建一個名爲Truck的類,該類從Vehicle中派生並具有其他屬性:以噸爲單位的裝載能力(類型爲double,因爲它可能包含小數部分)和以噸爲單位的拖曳能力(類型爲double)。給你的類一個合理的補充構造函數和訪問方法,以及一個equals方法。寫一個驅動程序(無雙關語),測試你的所有方法。 – Snobbysteven 2013-04-23 00:44:00

+0

nvm。我明白你的意思了。謝謝!有效 – Snobbysteven 2013-04-23 17:30:24