子类构造函数是否需要超类构造函数的所有参数?

时间:2013-10-16 23:59:48

标签: java inheritance constructor

我有两个类StaffAdvancedStaff,它们扩展了前者。

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 rolechar level字段添加到我的AdvancedStaff构造函数允许我调用超级构造函数,但我想知道是否有办法调用超级构造函数没有在我的子类构造函数中传递它的所有参数?

3 个答案:

答案 0 :(得分:3)

您必须为构造函数提供所有参数。

在您的情况下,您仍然可以调用Staff的构造函数,但必须提供一些默认值,如下所示:

super(number, title, name, "Entry level Advanced Staff", 'A');

这与你在AdvancedStaff的构造函数中所做的工作完全相同,只是现在它是Staff类设置私有变量的值,因为你通过它传递它构造函数。

另一方面,如果您打算从子类访问这些私有变量,那么您应该真正改为protected

答案 1 :(得分:1)

不,你必须提供函数/构造函数

的所有参数

答案 2 :(得分:1)

您需要接受@ WilliamGaul的建议或在父级中创建一个新构造函数,该构造函数只接受您要传入的3个参数。选择哪一个取决于上下文。