这可能有点笼统,如果太过笼统,我很抱歉。它涉及到一个大学班级的作业,因此想重点谈谈我对这个题目的理解,而不是答案应该是什么。我理解的情况是:我有一个父类叫pet,和两个子类叫Dog和Cat。UML类图指定Pet包含的方法是 createPet()
, updatePet()
和 petCheckIn()
. petCheckIn()
如果还没有对象,则需要创建对象,如果有,则需要更新对象。
这两个子类包含了默认的构造函数,以及它们的属性的setter和getter,但没有其他特定的东西。
我不相信会有需要Pet对象的实例,因为被选中的宠物总是狗或猫。如果构造函数不被子类继承,但方法是继承的,而且...。createPet()
严格来说并不是一个构造函数,如果设计得当,继承的方法是否可以执行构造函数的功能?我觉得实现方式应该是这样的(不关心具体的语法,而是我对这里能做什么,不能做什么的理解)。
我的伪代码是:
Execute Dog/Cat inherited petCheckIn()
IF new pet THEN
Execute Dog/Cat inherited createPet()
ELSE
Execute Dog/Cat inherited updatePet()
This is an entry level programming class, and so I cant imagine that the implementation would be terribly complex.Likely I am misunderstanding somethingovercomplicating.
不管怎样,谢谢你的时间。
EDIT:真的很抱歉,我一直没有给你回复@Karam和@Chung。生活有时就像一列货运列车一样,我。指定另一个类不在任务范围内(虽然我想知道的大部分内容似乎也是如此),没有指定任何关于签名的内容(就是methodName+它的参数对不对)。最终,我相信很大程度上取决于整体程序如何实现这些类,而这一点并没有详细介绍。我可以很自信的说,我只是问了一些问题,这些问题已经超出了那个阶段的教学计划的目的。我最终在超级类中使用了一个参数化的构造函数,而在子类中使用了另一个构造函数,将超级类字段的参数传递给超级类构造函数,然后初始化子类的特定字段。Karam,我从来没有真正定义过构造函数的方法,也无法对自己进行设计模式的教育,但是我的一个亲戚也提到了一个抽象工厂。我认为这可能是最好的处理方式。不幸的是,我现在没有更多的时间去研究这个问题,所以我称它为好。
我非常感谢你们的帮助。
Dog.java构造函数。
//Overloaded Constructor that passes parameters to Superclass
constructor.
//TODO: Reconsider which fields need a parameter and which can be set to
default at this point in the program.
//TODO: Verify that not passing an argument for catSpace will default to
-1.
//FIXME: Is dogSpaceNBR known at this point in program?
public Dog(int dogSpaceNBRInput, double dogWeightInput, boolean
groomingInput, String petTypeInput, String petNameInput, int petAgeInput,
int dogSpaceInput, int catSpaceInput, int daysStayInput, double
amountDueInput) {
// Passes arguments common to all pet subclasses to superclass
constructor.
super(petTypeInput, petNameInput, petAgeInput, dogSpaceInput,
catSpaceInput, daysStayInput, amountDueInput);
//Dog specific variables
dogSpaceNbr = dogSpaceNBRInput;
dogWeight = dogWeightInput;
grooming = groomingInput;
}
如果我很好地理解你的问题,你想能够创建不同的实例,你的宠物根据子类只使用方法
有一种设计模式叫做 抽象工厂 它被用来忽略不同方法的具体创造。
例子 :
你有 class Pet
( 应该是抽象的 ),其中包含方法 createPet() {}
在你的子类中,你必须简单地重新定义方法。createPet() { return new Dog() ; /* or */ return new Cat() ;}
这可以帮助你每当你创建一个新的子类,重新定义方法,而不改变原来的类,这将不仅适用于方法。createPet()
但对于你所有的方法