2013-04-23 37 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