1

我有两个类,Staffand 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构造函数允许我调用超级构造函数,但我想知道是否有一种方法可以调用超级构造函数而不在我的子类构造函数中传递其所有参数?

4

3 回答 3

3

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

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

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

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

附带说明一下,如果您打算从子类中访问这些私有变量,那么您真的应该制作它们protected

于 2013-10-17T00:03:45.020 回答
1

不,您必须向函数/构造函数提供所有参数

于 2013-10-17T00:01:21.273 回答
1

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

于 2013-10-17T00:07:24.943 回答