Java 子类构造函数是否需要超类构造函数的所有参数?
我有两个类,Java 子类构造函数是否需要超类构造函数的所有参数?,java,inheritance,constructor,Java,Inheritance,Constructor,我有两个类,Staff和AdvancedStaff,它们扩展了前者 Staff具有此构造函数: public Staff (String number, String title, String name, String role, char level) { staffNumber = number; staffTitle = title; staffName = name; staffRole = role; p
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;
}
public AdvancedStaff (String number, String title, String name) {
super(number, title, name);
role = "Entry level Advanced Staff";
level = 'A';
}
我会注意到所有实例变量都被设置为private
而,Advanced Staff
具有此构造函数:
public Staff (String number, String title, String name, String role, char level) {
staffNumber = number;
staffTitle = title;
staffName = name;
staffRole = role;
payScaleLevel = level;
}
public AdvancedStaff (String number, String title, String name) {
super(number, title, name);
role = "Entry level Advanced Staff";
level = 'A';
}
但是,这会为我的Staff
构造函数抛出一个“symbol not found”错误
我试过使用super.staffRole=“入门级高级职员”但是我的超类的私有作用域阻止了这一点
我发现将字段字符串角色
和字符级别
添加到我的AdvancedStaff
构造函数中可以调用超级构造函数,但我想知道是否有一种方法可以调用超级构造函数而不在子类构造函数中传递其所有参数?否,您必须向函数/构造函数提供所有参数否,您必须向函数/构造函数提供所有参数您必须向构造函数提供所有参数
在您的情况下,您仍然可以调用Staff
的构造函数,但是必须提供一些默认值,如下所示:
super(number, title, name, "Entry level Advanced Staff", 'A');
这与您在AdvancedStaff
的构造函数中所做的工作相同,只是现在是Staff
类设置私有变量的值,因为您正在通过构造函数传递它
另一方面,如果您计划从子类访问这些私有变量,则应该真正使它们受到保护。您必须向构造函数提供所有参数
在您的情况下,您仍然可以调用Staff
的构造函数,但是必须提供一些默认值,如下所示:
super(number, title, name, "Entry level Advanced Staff", 'A');
这与您在AdvancedStaff
的构造函数中所做的工作相同,只是现在是Staff
类设置私有变量的值,因为您正在通过构造函数传递它
另一方面,如果您计划从子类访问这些私有变量,那么您应该将它们设置为受保护的。您需要接受@WilliamGaul的建议,或者在父类中创建一个新的构造函数,该构造函数只接受要传入的3个参数。选择哪一个取决于上下文 您要么接受@WilliamGaul的建议,要么在父级中创建一个新的构造函数,该构造函数只接受要传入的3个参数。选择哪一个取决于上下文