子类构造函数是否需要超类构造函数的所有参数?
我有两个class, Staff
和AdvancedStaff
,它扩展了前者。
Staff
有这个构造函数:
public Staff (String number, String title, String name, String role, char level) { staffNumber = number; staffTitle = title; staffName = name; staffRole = role; payScaleLevel = level; }
我会注意到所有实例变量都已设置为私有。
虽然, Advanced Staff
有这个构造函数:
public AdvancedStaff (String number, String title, String name) { super(number, title, name); role = "Entry level Advanced Staff"; level = 'A'; }
但是,这会为我的Staff
构造函数抛出“找不到符号”错误。
我尝试过使用super.staffRole = "Entry level Advanced Staff";
但是我的超类的私有范围阻止了这一点。
我发现将String role
和char level
到我的AdvancedStaff
构造函数允许我调用超级构造函数,但我想知道是否有办法调用超级构造函数而不在我的子类构造函数中传递其所有参数?
您必须提供构造函数的所有参数。
在你的情况下,你仍然可以调用Staff
的构造函数,但是你必须提供一些默认值,如下所示:
super(number, title, name, "Entry level Advanced Staff", 'A');
这与您在AdvancedStaff
的构造函数中已经完成的工作完成相同的工作,现在只有Staff
类设置私有变量的值,因为您通过构造函数传递它。
另外,如果您计划从子类访问这些私有变量,那么您应该真正使它们protected
。
不,你必须提供函数/构造函数的所有参数
您需要接受@WoniamGaul的建议或在父级中创建一个新构造函数,该构造函数只接受您要传入的3个参数。选择哪一个取决于上下文。