Java oop接口实现与抽象类
我有这样一个场景,我有4种动物:Java oop接口实现与抽象类,java,oop,design-patterns,uml,Java,Oop,Design Patterns,Uml,我有这样一个场景,我有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
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()和speak()方法)是更好的方法?哪种方式更好 你做得很好。
Wild Cat和Dog派生自没有hunt()方法的Cat和Dog类。因此,他们必须独立获得它。在包括Java在内的大多数语言中,禁止有多个父对象。所以,您必须从接口获取hunt()。最好是独立创建函数。如果两种野生动物的狩猎方式相同,您可以在接口中将其声明为默认方法并在那里定义它
至于另一个函数speak(),您可以像以前一样执行它-为了一致性,或者将其放入Animal类中并在具体类中重写它。它有道理,因为它看起来,两只猫都有相同的speak()方法,就像狗一样
至于接口的名称,我将其中一个命名为Speaker,而不是Speaker,类似于Hunter
请注意,在Java中,它们不是
操作
,而是方法
虽然特定语言代码不是目的,但感谢您的更正并提出了替代解决方案。相反,使用双亲更特定于语言。我们不能完全脱离现实生活。有一个+1-我认为,这是一个很好的例子,在哪里使用接口,在哪里不使用接口。