gpt4 book ai didi

Java 构造函数错误

转载 作者:行者123 更新时间:2023-12-01 07:14:30 28 4
gpt4 key购买 nike

我收到构造函数错误。为了使这段代码正常工作,我需要在 B 类中使用 super 吗?

 class A {  
protected String s ;
A (String s) {
this.s = s ;
}
}

class B extends A {
String s ;
B(String s) {
this.s = s ;
}
}

最佳答案

是的,您需要从 B 的构造函数中调用 super 构造函数。如果您不指定 this(...)super(...)在构造函数的开头,隐式调用 super()将为您插入 - 对父类(super class)的无参数构造函数的调用。在这种情况下,A 中没有无参数构造函数。 - 因此您需要显式指定要调用的构造函数以及参数。

您可能想要另一个名为 s 的变量不过,在 B 内...

我怀疑你想要这个:

class B extends A {
B(String s) {
super(s);
}
}

重要的是要了解如果您还声明了一个名为 s 的变量,会发生什么情况。在B 。然后,B 的每个实例都有两个自变量 - A 中声明的那个以及 B 中的一个影子 。他们可以很容易地采用不同的值......这将非常令人困惑。

请注意,此外,将字段设置为私有(private)几乎总是一个好主意 - 此时您并不真正知道您的父类(super class)声明了哪些变量,因为您无法访问它们。如果您碰巧隐藏了一个变量,至少不会导致任何明显的歧义(当然,这是由规范处理的)。不过,一个变量与其父类(super class)中的变量具有相同的名称通常仍然是一个错误 - 这表明您对同一信息有两个不同的事实来源。

关于Java 构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244439/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com