我有两个类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
构造函数允许我调用超级构造函数,但我想知道是否有办法调用超级构造函数没有在我的子类构造函数中传递它的所有参数?
答案 0 :(得分:3)
您必须为构造函数提供所有参数。
在您的情况下,您仍然可以调用Staff
的构造函数,但必须提供一些默认值,如下所示:
super(number, title, name, "Entry level Advanced Staff", 'A');
这与你在AdvancedStaff
的构造函数中所做的工作完全相同,只是现在它是Staff
类设置私有变量的值,因为你通过它传递它构造函数。
另一方面,如果您打算从子类访问这些私有变量,那么您应该真正改为protected
。
答案 1 :(得分:1)
不,你必须提供函数/构造函数
的所有参数答案 2 :(得分:1)
您需要接受@ WilliamGaul的建议或在父级中创建一个新构造函数,该构造函数只接受您要传入的3个参数。选择哪一个取决于上下文。