2016-01-21 151 views
0

我正在做一个abstract superItem类,但我不确定把这个构造函数的参数放在哪里。这是因为Item由不同主题组成,即Course,Student,其将具有不同的参数。什么作为参数传递给构造函数从超类

Course的构造将是

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类的所有变量的例子。

+0

你能解释一下'学生'和'课程'如何被视为'项目'?对他们来说常见的是,你需要他们来扩展相同的抽象基类吗? – Jason

+0

@Jason,他们Item'的'两个子类,因为最终所有'Items'将被放入任意'List' – user180708

+2

@ user180708只是为了能够把一切都在一个列表中,你并不需要一个超类。你可以创建一个List ,你可以把你的对象放在里面。尽管如此,这没有什么意义。 –

回答

0

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

您应该考虑如何使用Item对象以及如何使用Student对象。想一想,什么是Item在你的应用程序中,它有什么样的属性等。这将导致你到一个适当的类设计。

项目应该包含子类的共同属性。恐怕,你想不恰当地申请继承,因为课程和学生没有太多共同点。再说了,你想有一个类Teacher和类Student那么公共超可能是Person其中将包括性别,年龄,姓名等

+0

好吧,我在想,我的抽象超类需要构造函数的参数,如果我想创建的'Item'类的getter/setter方法。但是,我可以为子类使用getter/setter方法,然后将其转换为'Item'? – user180708

+1

我更新了我的答案。我建议你更深入地思考这个问题。继承应该很少使用,只有在当超类可以被视为子类的泛化情况下(例如,人是老师和学生的概括)。 –

0

我不认为继承是正确的选择在这里,除非你真的拼命地需要在单一列表结构中混合使用课程和学生,在这种情况下,我真的很想看看你甚至在做什么。

如果你在对象之间没有共同点,它们不应该共享一个共同的超类。根据这些构造函数中的参数,这些对象没有任何共同之处。因此,你不应该让一个超类加入它们。

所以你发现没有任何子类不使用超类的任何变量的例子是因为超类不应该这样做。

例如,CircleSquareShape子类(最后一个可能是一个接口),但不WheelPerson_Named_CarlGeneric_Thing子类。车轮和卡尔之间没有什么共同之处,不过它们全都是Object

想想你是否需要这个超类。如果你这样做,你需要弄清楚如何不需要它,因为这实际上并不是继承应该如何工作。也许,将你的巨大物品清单分成你所拥有的每个类的清单。

相关问题