当前位置: 首页 > 面试题库 >

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

归俊杰
2023-03-14
问题内容

我有两个类,StaffAdvancedStaff,扩展了前一个类。

Staff 具有以下构造函数:

public Staff (String number, String title, String name, String role, char level) {
        staffNumber = number;
        staffTitle = title;
        staffName = name;
        staffRole = role;
        payScaleLevel = level;
    }

我将注意到所有实例变量都已设置为private。

同时,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


问题答案:

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

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

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

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

附带说明一下,如果您打算从子类访问这些私有变量,则应protected改为使用它们。



 类似资料:
  • 请帮我从这段代码中查找错误。我还是新手,我不知道这是否正确。我确实有一个错误。这就是错误:类Person中的构造函数Person不能应用于给定类型;super();^requiredent:String,String,String找到:没有参数原因:实际和正式参数列表长度不同这是我的代码: 编辑:如果我对Person和Address类都这样做。我只能有三个ARG构造函数。如何调用one-arg构造

  • 无论我用什么方法尝试,无论是主构造函数还是次构造函数,我都不知道如何在kotlin中声明一个带有超类和构造函数的新类。 这是我最想做的,但它给出了一个错误,期望成员声明。 这是我认为主要构造函数的外观,但它给出了相同的错误。在Internet上搜索没有帮助,我只能找到第二个示例。 那么,用一个超类和它的一个构造函数创建一个类的所有有效方法是什么呢?

  • 问题内容: 我有一个用JUnit4语法编写的测试类,可以使用“以junit测试方式运行”选项在eclipse中运行而不会失败。通过蚂蚁目标运行相同的测试时,出现以下错误: 我在类中没有public no arg构造函数,但这真的有必要吗? 这是我的蚂蚁目标 测试类没有构造函数,但是它具有带有默认修饰符的内部类。它也有一个匿名内部类。两个内部类均给出“ Test类应具有公共零参数构造函数错误”。我正

  • 问题内容: 编译该程序时,出现错误- 错误-找不到构造函数Person()。为什么定义Person()是必要的? 问题答案: 创建时,您要同时创建一个。为了确保构造正确,编译器在构造函数中添加了一个隐式调用: 由于没有无参数构造函数,因此失败。 您可以通过以下任一方式解决它 添加对super的显式调用,如下所示: } 或通过将no-arg构造函数添加到: } 通常,编译器还会隐式添加无参数构造函数

  • 我问这个问题是因为在Python和Java中,如果父类构造函数需要0参数,则不需要调用super()。 Javascript 蟒蛇 Java

  • 在此处输入图像描述 在此处输入图像描述 我仍然不知道该怎么办(我在UserRepository上尝试了Repository注释-错误是一样的)。错误消息:`启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2022-03-14 09:04:54.626错误7236---[main]o.s.b.d.LoggingFailureAnalysisR