forwardonly2015, да это само собой, просто я написал пример - как это выглядит на ES6, а не о том "
треше", когда чтоб добавить новую "утку", нужно перелопатить весь код. Т.е банальное наследование.
На самом деле - мне было лень писать абстрактный класс, а потом еще утки =)
т.е
class AbstractDuck {
constructor(name) {
this.name = name;
}
// все утки умеют плавать
swim(name) {
// TODO
}
// не все утки умеют летать, поэтому пусть это будет "будто" метод интерфейса
fly() {}
// другие общие методы
}
class Duck extends AbstractDuck {
constructor(name) {
super(name);
}
// а эта - умеет еще и летать.
fly() {
super();
// TODO
}
// другие методы
}
Да и знания мои в ООП - забей ваще, допустим - "обычная утка" и "резиновая" умеют крякать, одно дело, если они крякают по разному тогда есть смысл реализовывать для них разные методы
quack, но если методы идентичны, а в абстрактный класс их не вынесешь, ибо возвращаемся к тому, что "деревянная" утка будет знать о том, что знать не должна, а если реализовывать - как и задумано, т.е перегружать методы, то получится копипаст, а это тоже не ок=)