[英]oop interface implementation along with abstract class
在这种情况下,我有4种动物:
A]. Cat
i. Name - property
ii.Speak - operation
B]. Wild Cat
i. Name - property
ii.Speak - operation
iii. Hunt - operation
C]. Dog
i. Name - property
ii.Speak - operation
D]. Wild Dog
i. Name - property
ii.Speak - operation
iii. Hunt - operation
现在,我必须为以上四种动物实现类层次结构。 我做到了如下:
/////////////////////////Interface iAnimal///////////////////////////////
Interface iAnimalHunter{
Hunts();
}
Interface iAnimalSpeach{
Speaks();
}
/////////////////////////Abstract class Animal///////////////////////////////
Abstract class Animal{
Protected String name;
protected function Speaks(){
}
}
/////////////////////////Class Cat///////////////////////////////
Class Cat extends Animal implements iAnimalSpeach{
Public function Speaks(){
}
}
/////////////////////////Class WildCat///////////////////////////////
Class WildCat extends Cat implements iAnimalSpeach, iAnimalHunter{
Public function Speaks(){
}
Public function Hunts(){
}
}
/////////////////////////Class Dog///////////////////////////////
Class Dog extends Animal implements iAnimalSpeach{
Public function Speaks(){
}
}
/////////////////////////Class WildDog///////////////////////////////
Class WildDog extends Dog implements iAnimalSpeach, iAnimalHunter{
Public function Speaks(){
}
Public function Hunts(){
}
}
就面向对象的设计模式而言,使用接口还是简单的抽象类(没有接口,允许子类在需要时覆盖hunt()和talk()方法)是否正确? 哪个更好的方法?
你做得很好。 Wild Cat和Dog是从Cat和Dog类派生的,它们没有hunt()方法。 因此,他们必须独立获得它。 大多数语言(包括Java)都禁止有多个父母。 因此,您必须从接口获取hunt()。 最好是独立创建函数。 如果两种野生物的狩猎过程都相同,则可以在接口中将其声明为默认方法,然后在其中进行定义!
至于另一个功能,speak(),您可以按照已做的方式进行操作-为了保持一致性,或者将其放入Animal类并在具体类中覆盖它。 这是有道理的,因为看起来,两只猫将具有与狗相同的speak()方法。
至于接口名称,我将命名其中一个不是“语音”,而是“扬声器”,类似于Hunter。
请注意,在Java中,它们不是operations
,而是methods
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.