TreeSet和抽象类?

时间:2014-10-06 05:13:01

标签: java treeset

设计一个名为“Vehicle”的抽象类,它有成员:

字符串颜色,双倍速度,字符串昵称

和抽象方法:

public abstract double getNumberOfWheels();

设计具体类“Sedan”,“Motorcycle”和“Truck”作为“Vehicle”的子类 创建轿车,摩托车和卡车的对象,并输出以下信息*  车辆的类型  车辆的颜色  车辆的昵称

按顺序排列  速度  颜色  车轮数量

例如,如果您创建:

(1)轿车对象:昵称“风”颜色“白色”速度100

(2)摩托车对象:昵称“闪光”颜色“黑色”速度120

(3)卡车对象:昵称“奶奶”颜色“黄色”速度88

我对如何编写悔罪类感到困惑。我究竟如何执行这些类的输出?

这是我的完整车辆类:

public abstract class Vehicle {
   String color;
   double speed;
   String nickname;


public Vehicle(String color, double speed, String nickname)
{

}

public String getColor() {
    return color;
}
public void setColor(String color) {
    this.color = color;
}
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
    this.speed = speed;
}

public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}

public abstract double getNumberOfWheels(); 

 }

这是轿车:

public class Sedan extends Vehicle {

public Sedan(String color, double speed, String nickname) {
    super(color, speed, nickname);

}

我是否必须为类型创建另一个字符串?如何让它返回那些输出?我对输出感到有些困惑。

4 个答案:

答案 0 :(得分:1)

首先,您需要更改车辆类以定义正确的构造函数:

public abstract class Vehicle {
   String color;
   double speed;
   String nickname;

  public Vehicle(String color, double speed, String nickname)
  {
      this.color = color;
      this.speed = speed;
      this.nickname = nickname;
  }
  .....
}

现在您可以将具体类定义为:

public class Sedan extends Vehicle {
    private double numOfWheels = 4.0;

    public double getNumberOfWheels()
    {
        return numOfWheels;
    }

    public Sedan(String color, double speed, String nickname) {
        super(color, speed, nickname);
    }

    public Sedan(String color, double speed, String nickname, double numOfWheels) {
        this.numOfWheels = numOfWheels;
        super(color, speed, nickname);
    }

    public String toString() {
        StringBuffer buff = new StringBuffer();
        return buff.append("Nickname = ").append(nickname).append(" color = ").append(color)
               .append(" speed = ").append(speed).append(" Num of Wheels = ")
               .append(numOfWheels).toString();
    }
}

现在测试代码:

public class TestVehicle { 
    public static void main(String[] args) { 
        Sedan vehicle1 = new Sedan("red", 120.0, "XUV");
        Sedan vehicle2 = new Sedan("white", 160.0, "Safari", 6.0);
        System.out.println(vehicle1); // This will call toString method of Sedan class.
        System.out.println(vehicle2); // This will call toString method of Sedan class.
    } 
}

答案 1 :(得分:0)

您可以使用基本抽象类的方法获得的属性值 - 它们都可用于每个子类。你还需要实现

public double getNumberOfWheels()
{
    // TODO: implementation of subclass
}

扩展Vehicle类的每个子类的方法。 请看下面的链接,我认为这会有所帮助: http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

答案 2 :(得分:0)

你的Sedan类继承了已经实现的所有Vehicle方法(在本例中没有抽象方法),getNumberOfWheels();除外。您的Vehicle类希望您在Sedan类中编写getNumberOfWheels()方法。然后你可以制作一个Sedan对象!

以下是您可以接收输出的示例。

public Sedan(String color, double speed, String nickname) {
    super(color, speed, nickname);

public double getNumberOfWheels(){
     return 4;
}

public static void main(String[] args){
  Sedan BMW = new Sedan("Black",34,"idk");
  System.out.println(BMW.getNumberOfWheels());
  System.out.println(BMW.getSpeed());
}
}

答案 3 :(得分:0)

如果声明一个抽象方法,这意味着你需要在子类中提供它的详细信息。

public class Sedan extends Vehicle {
    double numOfWheels = 4.0;

    public double getNumberOfWheels()
    {
        return numOfWheels;
    }

    public Sedan(String color, double speed, String nickname) {
        super(color, speed, nickname);
    }
}

要使用这些对象,需要main()来创建和使用这些对象。

public class UseVehicle { 
    public static void main(String[] args) { 
        Sedan car1 = new Sedan("white", 100, "wind"); 

        System.out.printf("car1: (%s, %d, %s) \n", 
        car1.getColor(), car1.getSpeed(), car1.getNickname());
    } 
}