2014-10-06 4 views
0

Дизайн абстрактный класс под названием «Автомобиль», которая имеет членов:Дерево и абстрактные классы?

Струнный цвет, двойная скорость, String прозвище

и абстрактный метод:

общественные абстрактные двойные getNumberOfWheels();

Дизайн конкретные классы «седан», «Мотоцикл», и «Грузовик», как подклассы «Vehicle» Создание объектов Sedan, мотоциклов и грузовых автомобилей, а также вывести следующую информацию * Тип транспортного средства The цвет автомобиля прозвище автомобиля

В порядке Скорость Цвет Количество колес

Например, если вы создаете:

(1) Седан объект: ник «ветер» цвет «белый» Скорость 100

(2) Объект Мотоцикл: прозвище «вспышка» цвета «черный» Скорость 120

(3) объект Грузовик: ник « бабушка "цвет" желтый "скорость 88

Я немного смущен о том, как закодировать классы contrite. Как именно я выполняю вывод этих классов?

Вот мой полный класс автомобиля:

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); 

} 

Должен ли я сделать еще одну строку для типа? и как я могу вернуть эти результаты? Я немного запутался в результатах.

+0

Не удалось получить ваш q ясно. Вы можете создать объект - «Vehicle ob1 = новый Sedan» («Белый», 100.00, «Ветер») 'и может получить значения -' ob1.getColor() '. Это что-то, что вам нужно? – arin1405

ответ

0

Значение свойств, которые вы можете получить, используя методы базового абстрактного класса - все они доступны для каждого подкласса. Также вам необходимо внедрить

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

метод для каждого подкласса, который распространяется Класс транспортного средства. Пожалуйста, см ссылку ниже, я думаю, что было бы полезно: http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

0

Ваш класс седан унаследовал все методы транспортного средства, которые уже реализованы (то есть ни один абстрактные методы в данном случае), за исключением getNumberOfWheels() ;. Класс вашего автомобиля ожидает, что вы напишете метод getNumberOfWheels() в своем классе Sedan. Тогда вы можете сделать объект 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()); 
} 
} 
+0

Хорошо, я вижу это сейчас. Я должен был просто наследовать струны из основного класса автомобилей. Наверное, я неправильно понял «тип», думая, что это будет другая строка. – user2985442

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()); 
    } 
} 
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. 
    } 
}