【发布时间】:2020-09-10 12:20:12
【问题描述】:
这可能有点笼统,如果过于笼统,我深表歉意。它与大学课程的作业有关,因此我想专注于我对该主题的理解,而不是答案应该是什么。
据我了解情况:
我有一个名为 pet 的父类,以及两个名为 Dog 和 Cat 的子类。 UML 类 Diagrams 指定 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()
这是一个入门级的编程课程,所以我无法想象实现会非常复杂。 可能我误解了一些东西/过于复杂。
无论如何,感谢您的宝贵时间。
编辑: 真的很抱歉,我再也没有回复你@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;
}
【问题讨论】:
-
我希望我能很好地理解你的问题,你可以看到我的回答并告诉我这是否真的是你想要的
-
是否允许更改方法签名或创建其他类?假设您列出的所有方法(包括构造函数)都是公共的,那么拥有
createPet()方法有点令人困惑。因为您首先需要一个实际的 Pet 实例来调用该方法。因此,如果无法更改方法签名并且您无法创建任何其他类,那么我有充分的理由相信您可能误解了该作业的某些内容,或者只是没有提及一些重要的细节。
标签: java inheritance constructor subclass superclass