什么作为参数传递给超类的构造函数

时间:2016-01-21 01:43:31

标签: java constructor polymorphism abstract-class

我正在制作一个Item Item类,但我不确定将该位置作为此构造函数的参数。这是因为Course由不同的主题组成,即StudentCourse,它们将具有不同的参数。

public Course(String courseName, int courseNum) { super(); this.courseNum = courseNum; this.courseName = courseName; } 的构造函数将是

Student

并且public Student(int studentID, String studentName) { super(); this.studentName = studentName; this.studentID = studentID; } 的构造函数将是

super()

所以现在我的Item构造函数super不接受任何参数,但这也不是正确的。我试图查看这个主题,但它似乎只给出了使用{{1}}类的所有变量的例子。

2 个答案:

答案 0 :(得分:0)

抽象超类不接受构造函数参数是完全常见的。但是,在这种情况下,您还应该考虑,您真正需要的是一个通用接口,而不是超类。

您应该考虑如何使用Item对象以及如何使用Student对象。仔细考虑,你的应用程序中Item是什么,它有什么属性等等。这将引导你进行适当的课堂设计。

项应包含子类的公共属性。我担心,你想要不恰当地申请继承,因为课程和学生没有太多共同之处。比如,你想要一个班级Teacher和一个班级Student,那么共同的超类可以是Person,其中包含性别,年龄,姓名等。

答案 1 :(得分:0)

我不认为继承是正确的选择,除非你真的迫切需要将课程和学生混合在一个列表结构中,在这种情况下我真的很想看看你是什么&# 39;甚至做。

如果对象之间没有共性,则它们不应共享一个共同的超类。根据这些构造函数中的参数,这些对象没有任何共同之处。因此,您不应该创建一个连接它们的超类。

因此,您发现没有子类不使用超类中任何变量的示例的原因是因为超类不应该这样做。

例如,CircleSquare作为Shape的子类(最后一个可能是一个接口),但不是WheelPerson_Named_Carl作为子类Generic_Thing。轮子和名叫卡尔的人之间没有任何共同点,只不过它们都是Object

想想你是否需要这个超类。如果你这样做,你需要弄清楚如何不需要它,因为真的,真的,不是继承应该如何工作。将你的Big Giant List of Things分成你所拥有的每个班级的名单。