Правильно ли я использую абстрактный класс Animal?
abstract Animal {
abstract say()
abstract eat()
}
Dog implements Animal {...}
Cat implements Animal {...}
Cow implements Animal {... and getMilk}
Все три класса похожи но у последнего добавляется метод получить молоко, Есть ли ошибка в проектировании, моэжно ли сказать что коровка также реализует класс Живтоное?
моэжно ли сказать что коровка также реализует класс Живтоное?
не реализует а наследует, реализуются Интерфейсы (реализуют методы указанного интерфейса):
Abstract class Animal {
abstract function gotLegs();
abstract function eat();
}
interface Milking {
// Интерфейс для коровы которая дает молоко.
public function getMilk();
}
interface Guardianship {
// Интерфейс для собаки которая охраняет.
public function Guarding();
}
interface Hunting {
// Интерфейс для кошки которая ловит мышей.
public function huntMouse();
}
Сам вопрос провоцирует: Да! Не правильно! )
Но если серьезно.
Не стройте систему от абстрактного к конкретному. Так хорошо в учебнике. в реальности это порождает много ненужных слоем и классов. Делайте это от конкретного к абстрактному. Т.е. есть два класса которые вы применяете. у них есть общее. Вынесите общее в абстрактный класс. Т.е. исходим с низу к абстрактному.
Второй момент. Связана с полиморфизмом. Это придумать интерфейс а затем его реализацию. Но это другая песня.
Сергей . Т.е. исходим с низу к абстрактному.
Это придумать интерфейс а затем его реализацию. Но это другая песня.
Противоречие)
Интерфейс как раз от общего к частному а не наоборот