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个参数。选择哪一个取决于上下文