了解Java超级类和子类构造函数和方法之间的关系。

问题描述 投票:0回答:1

这可能有点笼统,如果太过笼统,我很抱歉。它涉及到一个大学班级的作业,因此想重点谈谈我对这个题目的理解,而不是答案应该是什么。我理解的情况是:我有一个父类叫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;
    }
java inheritance constructor subclass superclass
1个回答
0
投票

如果我很好地理解你的问题,你想能够创建不同的实例,你的宠物根据子类只使用方法

有一种设计模式叫做 抽象工厂 它被用来忽略不同方法的具体创造。

例子 :

你有 class Pet ( 应该是抽象的 ),其中包含方法 createPet() {}

在你的子类中,你必须简单地重新定义方法。createPet() { return new Dog() ; /* or */ return new Cat() ;}

这可以帮助你每当你创建一个新的子类,重新定义方法,而不改变原来的类,这将不仅适用于方法。createPet() 但对于你所有的方法

© www.soinside.com 2019 - 2024. All rights reserved.