繁体   English   中英

oop接口实现以及抽象类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM