2013-12-20 2 views
0

Основано на this UML diagramРезультаты, основанные на диаграмме UML?

Какое из следующего выражения будет работать?

Boat boat1 = new Boat(); 
Boat boat2 = new Boat(Color.black, 300.2); 
Boat boat3 = new Kayak(Color.yellow, 30.2, 1, 1); 
Kayak kayak1 = new Kayak(Color.yellow, 30.2, 1, 1); 
Kayak kayak2 = new Kayak(); 

У меня возникли проблемы, потому что я думаю, что, поскольку в Boat классе Color является частным, так экземпляр Kayak не имеет color, связанный с ним. Это правда?

Также, в том случае, когда вступает в силу то, что класс Boat является абстрактным, как он влияет на Kayak?

Уверен, у экземпляра класса Boat есть связанный с ним numSeats?

+0

Где он говорит, что судно является абстрактным? – BevynQ

+1

Класс лодок выделен курсивом - символизм для абстрактного. – user3089390

ответ

1

Я бы сказал, что это так:

Boat boat1 = new Boat(); // doesn't work, Boat is abstract 
Boat boat2 = new Boat(Color.black, 300.2);// doesn't work, Boat is abstract 
Boat boat3 = new Kayak(Color.yellow, 30.2, 1, 1); // ok 
Kayak kayak1 = new Kayak(Color.yellow, 30.2, 1, 1); // ok 
Kayak kayak2 = new Kayak(); // No such constructor 

У меня возникли проблемы, потому что я думаю, что, поскольку в классе лодок, цвет является частным, так экземпляр Kayak не имеет цвета связанные с ним. Это правда?

Не очень, Kayak принимает Color как пары, так, то он может передать его в Boat конструктор

Кроме того, где тот факт, что класс лодок абстрактно вступает в игру, как это делает влияют на байдарку?

Нет, это нормально, чтобы получить от абстрактного класса, а затем использовать его в качестве опорной базы (т.е. Boat x = new Kayak)

1

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

Ответы на вопросы:

У меня возникли проблемы, потому что я думаю, что, поскольку в классе лодок, цвет является частным, так экземпляр Kayak не имеет цвет, связанный с ним. Это правда?

Нет, это неправильно. Согласно UML, лодка имеет цвет. Это «свойство» можно увидеть с помощью геттера getColor и сеттера setColor. Частное поле - это только деталь реализации, что не имеет значения. Поскольку Каяк простирается (происходит от) Лодка, можно сказать, что Каяк - это лодка. Это называется подтипированием. Кроме того, Kayak наследует код от Boat, а также наследует цвет свойства. Итак, у каяка также есть цвет.

Кроме того, когда вступает в игру тот факт, что класс лодки является абстрактным, как это влияет на каяк?

На самом деле не имеет значения, является ли суперкласс абстрактным или нет, при его расширении.Важно следующее: если ваш суперкласс абстрактен и содержит абстрактные методы, а ваш подкласс не является абстрактным, то ваш подкласс должен обеспечивать реализации абстрактных методов.

Пока что в вашем классе лодки нет абстрактных методов. Так что для расширения (Каяк простирается на лодке) не имеет значения, что Лодка абстрактна. На самом деле это имеет значение при рассмотрении примерных выражений.

И, наконец, имеет ли экземпляр класса «Лодка» связанные с ним numSeats?

Этот вопрос содержит ошибку: не может быть объектов класса Лодка. Просто потому, что класс Boat является абстрактным. Вы не можете создавать экземпляры абстрактных классов!

Класс Kayak не является абстрактным. Таким образом, вы можете создавать экземпляры из него. У экземпляров каяка есть несколько мест. Но, поскольку у вас могут быть другие классы, расширяющие Лодку, у которых нет места, вы не можете сказать, что у всех лодок будет несколько мест.

Кстати: Вы можете ответить на вопрос, какие выражения действительны? Не могли бы вы опубликовать свои ответы и причины?

Я хочу сказать, что первые два не будут работать, потому что Лодка абстрактна. Третий и четвертый будут работать, потому что каяк IS A Boat, поэтому его можно установить как класс лодки с параметрами байдарки, и, очевидно, каяк - это байдарка. Последний не будет работать, так как такого конструктора нет.

Этот ответ верный, но мы должны работать над вашей формулировкой.

поэтому он может быть установлен как класс Лодка с Kayak параметры

байдарка не может «быть установлен как класс Boat». Давайте рассмотрим выражение

Boat boat3 = new Kayak(Color.yellow, 30.2, 1, 1); 

Вы создаете экземпляр Kayak, вызывая конструктор Kayak, который принимает цвет, двойной, и два целых числа (кстати: это единственный конструктор). Затем вы назначаете ссылку этого нового экземпляра Kayak на переменную boat3, которая имеет тип Boat. Заметьте, что я говорю о типе здесь, а не о классе. Как мы уже упоминали, каяк - это лодка, это задание верно.

Эта концепция ООП называется политипом подтипа: переменная типа Лодка может ссылаться на любую Лодку, а также подтипы ее. (В этом случае он должен быть подтипом, так как Лодка является абстрактной)

Просто для уточнения формулировок: Подклассификация означает только технический процесс расширения класса. Это также означает наследование кода суперкласса. Подтипирование означает отношение a-a-a (каяк - это лодка) и является ключом к полиморфизму подтипов. В Java подклассификация всегда также является подтипированием.

+0

Я хочу сказать, что первые два не будут работать, потому что Лодка абстрактна. Третий и четвертый будут работать, потому что каяк IS A Boat, поэтому его можно установить как класс лодки с параметрами байдарки, и, очевидно, каяк - это байдарка. Последний не будет работать, так как такого конструктора нет. – user3089390

+0

Исправить. А другие три? – Seelenvirtuose

+0

Извините, слишком скоро верните возвращение. :) Значит ли это, что если атрибут веса в лодке был закрыт, но имел ли он связанные с ним методы, такие как setWeight или getWeight, его также можно было использовать? – user3089390

2

Единственные два конструктора, которые будут работать, являются:

Boat boat3 = new Kayak(Color.yellow, 30.2, 1, 1); 
Kayak kayak1 = new Kayak(Color.yellow, 30.2, 1, 1); 

байдарка будет иметь цвет, связанный с ним, если в конструкторе супер вызов к конструктору Boat.

Также, когда факт, что класс лодки является абстрактным, входит в игру , как это влияет на каяк?

Ничего. Это просто означает, что вы не можете создать экземпляр лодки.

И, наконец, имеет ли экземпляр класса лодки класс numSeats ?

No. Лодка ничего не знает о numSeats. Это абстрактное понятие. Это может быть доска для серфинга или океанский лайнер.

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