我不确定如何在Java中表示包含继承的模型。我有三个继承自超类的类,但其中一个类没有不同于超类的方法属性,例如:
public class Animal{
public int a;
public int b;
public int c;
}
public class Cat extends Animal (){
public int d;
public int e;
}
public class Dog extends Animal {
public int f;
public int g;
}
public class Cow extends Animal {
//it doesn't have different attributes or methods than Animal
}
(上面的属性和类只是示例) 我应该如何设计呢?拥有一个只从超类扩展而没有自己属性的类是否正确?或者我应该省略Cow类并从Animal中实例化它?谢谢!
答案 0 :(得分:3)
动物类最好是一个抽象类,其中包含所有动物共有的常用方法。 然后你可以创建一个类Cow扩展抽象类,以便你可以调用那些常用的方法(例如吃喝,并指定牛的方法,如moo()
答案 1 :(得分:1)
可以创建一个扩展Animal的Cow类,即使它没有添加任何属性。即使它没有向Animal类添加任何特定于Cow的行为或数据,Cow仍然是一种动物。
答案 2 :(得分:0)
我认为你应该创建一个代表Cow
对象的新类。考虑几个月后你想添加一些新行为......如果没有Cow
类,你需要重写代码的某些部分...你很可能已经测试过的部分。
答案 3 :(得分:0)
可以创建一个Cow课程,因为@Chris说,再想想如果你有一种喂养动物的方法,你的方法会看起来像这样:
public void feedAnimal(Animal animal);
现在,如果你不将牛扩展到Animal类,你将不得不创建第二种方法来喂养奶牛:
public void feedCow(Cow cow);
甚至强硬它是一种动物
答案 4 :(得分:0)
如果你有猫,狗和牛以外的其他动物你通过实例化动物类来为这些动物使用物体,那么没有任何新的领域,没有新的方法,没有任何新的领域,没有被覆盖的方法)。
另一方面,你只有Cat,Dog和Cow类型的动物,那么你应该让你的Animal类成为抽象类(或者更灵活的界面)。
答案 5 :(得分:0)
恕我直言,如果您的Cow
课程与Animal
相同,那么您的设计就会出现问题。
我的意思是,代替扩展Animal
类,可能只需要在实际需要添加功能时才需要BasicAnimal
类和几个扩展类。
或者另一种方法是将yor Animal
类转换为接口(或抽象类)并实现/扩展它。
在抽象类中,您应该只实现常用方法。但如果您发现Cow
的行为与Animal
的行为相同,那么最好采用BasicAnimal
方式......
答案 6 :(得分:0)
你不应该在集体动物中实施“牛”的三个原因: