2013-11-26 3 views
0

Изображение показать задачу: enter image description hereКак расширить или реализовать классы?

Сначала я извиняюсь, за мой плохо для выражения ума.

У меня есть такая задача, мне не нужно, чтобы вы делали это для меня.

Vehicle является родительским классом для Sedan (Cause Cedan class является строковым типом).

  1. Как расширить или реализовать класс автомобиля с универсальным классом?
  2. Я забыл спросить своего учителя, но, возможно, вы узнаете, что означает полосатый указатель на класс владельца, и что это такое: has a?

P.S. Если вам понадобится код, который я уже написал, я покажу вам.

Так что это мой родительский класс автомобиля:

public class Vehicle { 

    private int vehicleNumber; 
    protected int fuelTankSize; 
    protected int maxSpeed; 
    protected Owner owner; 

    //1 
    public Vehicle(int vehicleNumber){ 
     this.vehicleNumber = vehicleNumber; 
    } 
    //2 
    public Vehicle(int vehicleNumber, int fuelTankSize) { 
     this.vehicleNumber = vehicleNumber; 
     this.fuelTankSize = fuelTankSize; 
    } 
    //3 
    public Vehicle(int vehicleNumber, int fuelTankSize, int maxSpeed) { 
     this.vehicleNumber = vehicleNumber; 
     this.fuelTankSize = fuelTankSize; 
     this.maxSpeed = maxSpeed; 
    } 
    //4 
    public Vehicle(int vehicleNumber, int fuelTankSize, int maxSpeed, Owner owner) { 
     this.vehicleNumber = vehicleNumber; 
     this.fuelTankSize = fuelTankSize; 
     this.maxSpeed = maxSpeed; 
      this.owner = owner; 
    } 

    //1 
    public int getMaxSpeed() { 
     return maxSpeed; 
    } 
    public void setMaxSpeed (int maxSpeed){ 
     this.maxSpeed = maxSpeed; 
    } 
    //2 
    protected int getFuelTankSize(){ 
     return fuelTankSize; 
    } 
    protected void setFuelTankSize (int fuelTankSize){ 
     this.fuelTankSize = fuelTankSize; 
    } 
    //3 
    public Owner getOwner(){ 
     return owner; 
    } 
    public void setOwner (Owner owner){ 
     this.owner = owner; 
    } 

} 

ребенок Sedan с:

public class Sedan extends Vehicle { 

    private String registrationIndex;{  
    } 

    public Sedan (int vehicleNumber, int fuelTankSize, int maxSpeed, String registrationIndex, Owner owner) { 
     super(vehicleNumber, fuelTankSize, maxSpeed, owner); 
     this.setRegistrationIndex (registrationIndex); 
    } 

    public String getRegistrationIndex(){ 
     return registrationIndex; 
    } 
    public void setRegistrationIndex (String registrationIndex) { 
     this.registrationIndex = registrationIndex; 
    } 

} 

второй универсальный ребенок без ошибок:

public class Universal extends Vehicle { 
    private int trunkSize; 

    public Universal (int vehicleNumber, int fuelTankSize, int maxSpeed, int trunkSize, Owner owner) { 
     super(vehicleNumber, fuelTankSize, maxSpeed, owner); 
     this.setTrunkSize (trunkSize); 
    } 

    public int getTrunkSize() { 
     return trunkSize; 
    } 
    public void setTrunkSize(int trunkSize) { 
     this.trunkSize = trunkSize; 
    } 

    public void printDescription() { 
     super.printDescription(); 
     System.out.println("Universalo bagažinės tūris: " + getTrunkSize() + "l."); 
    } 

} 

и некоторые Misterious (мне) Класс владельца:

public class Owner { 
    public String firstName; 
    public String lastName; 

    public Owner (String firstName){ 
     this.firstName = firstName; 
    } 

    public Owner (String firstName, String lastName){ 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

добавил VechileTest для тестирования:

public class VehicleTest { 

     public static void main(String[] args) { 


      Vehicle vehicleInf = new Vehicle (1, 45, 260); 
      Universal universalInf = new Universal(2, 50, 220, 70); 
      Sedan sedanInf = new Sedan (3, 40, 180, "AVA 123"); 

      vehicleInf.printDescription(); 
      universalInf.printDescription(); 
      sedanInf.printDescription(); 
     } 
    } 
+0

Обратитесь к документации http://docs.oracle.com/javase/tutorial/java/javaOO/classdecl.html или задайте конкретный вопрос, который я уверен, что кто-то с радостью ответит. Ура! – Dropout

+1

Почему у вашего седана размер багажника? –

+0

Не знаю :), я всего лишь человек, которому нужно выполнять задание, а не человек, который его нарисовал. – galvakojis

ответ

2

Ну, первым делом я рекомендую вам прочитать хороший учебник/объяснение диаграмм классов UML, как this здесь, например.

После того, как вы знаете основы, это должно быть легко перевести на Java-код. Я дам вам код для класса Universal и начните свой Vehicle. Остальное вам придется делать самостоятельно.

Класс Универсала:

public class Universal extends Vehicle { 

    private int trunkSize; 

    public int getTrunkSize() { 
    return this.trunkSize; 
    } 

    public void setTrunkSize(int trunkSize) { 
    this.trunkSize = trunkSize; 
    } 
} 

Как вы можете видеть, первый блок внутри коробки класса относится к переменным. - и + указывает на видимость (для -, общедоступный для +).

Следующий блок посвящен методам, определяющим видимость, тип возврата, имя метода и параметры (тип и имя).

Стрелка между Universal и Vehicle указывает на наследование (см. Код Universal extends Vehicle).

Итак, вся диаграмма - это план строительства для ваших классов; по крайней мере, для статической части, что означает отношения и состояние, которое они могут иметь.

Начало класса автомобиля:

public class Vehicle { 
    private int vehicleNumber; 
    // the rest here ... 
} 

Edit: Ну, теперь, когда я вижу свой код, вы, кажется, есть несколько заблуждений:

  1. Тип Седан не от тип String, это тип Sedan (который расширяет Vehicle). Просто новая переменная-член в типе Sedan имеет тип String, не имеет значения.

  2. К вашему 1-му вопросу: класс Vehicle является базовым (родительским) классом Sedan. Вы ничего не делаете с этим, наследование выражается от ребенка к родительскому, а не наоборот. Vehicle обычно должен быть объявлен абстрактным (так как вы не можете создать экземпляр общего Vehicle), но это не на диаграмме.

  3. К вашему второму вопросу: отношения has a - это только это. Он выразил, что один класс имеет другой класс, поскольку он является членом (который избыточно выражен внутри диаграммы классов уже), поэтому для этого нечего делать.

Кроме того ваш код несколько вопросов:

  1. Я не вижу никаких конструкторов, объявленных в классе Vehicle, те 4 может пойти.
  2. Ваш Sedan имеет сверхъестественную пару {} после объявления вашей переменной registrationIndex.
  3. Так как ваш Vehicle не имеет конструктора не по умолчанию, вы должны вызвать этот конструктор из вашего Sedan класса (или удалить конструктор из Vehicle.
  4. Вашего Universal класса вызывает Vehicle конструктор с trunkSize, а Vehicle конструктор ожидает vehicleNumber там.
+0

Спасибо, но это не совсем то, что искал – galvakojis

+0

@ user2956929 Добавил еще одно объяснение, характерное для вашего кода. – Matthias

+0

Может быть вы напишете, как позвонить в Турцию из Седана P.S. внесли некоторые изменения в класс Sedan – galvakojis

0

Ваш Vehicle класс не имеет конструктора без параметров, что означает, что Universal и Sedan должен явно вызвать одну из них (super(...);). Вы делаете это в Universal (правда, неправильно, поскольку вы передаете размер багажника вместо номера автомобиля, ожидаемого конструктором Vehicle), но не в Sedan.

Что касается второго вопроса: два основных отношения в ООП: is a и has a. Разницу можно легко объяснить, как это:

  • седан представляет собой транспортное средство
  • Транспортное средство имеет владельца

is a означает, что он наследует некоторые свойства чего-то другого, has a означает, что он имеет ссылку на что-то другое.

+0

Сделал некоторые изменения (вы можете видеть) на Седане, и теперь это лучше, но я получаю ошибку: «Транспортное средство (строка) не указано» – galvakojis

Смежные вопросы