gpt4 book ai didi

java - 不能直接调用父类(super class)型构造函数——为什么不呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:54 25 4
gpt4 key购买 nike

我有以下 Java 示例类:

public class A { }

public class Super {
protected Super() { }
public Super(A a) { }
}

public class Sub extends Super { }

public class Consumer {
public Consumer() {
Sub sub = new Sub(new A()); //compiler error
}
}

编译器错误指出参数不能应用于 Sub 中的默认构造函数,这是完全可以理解的。

我很好奇的是这个决定背后的理由。 Java在Sub中生成默认的空构造函数;为什么在这种情况下不能在幕后调用它?这主要是理智的手持情况,还是有技术原因?

编辑

我知道这是语言限制。我很好奇为什么这是语言限制。

编辑 2

似乎,就像通常的情况一样,我离实际工作的代码太近了,看不到全局。我在下面的答案中发布了一个反例,说明了为什么这是一件坏事®。

最佳答案

我认为这是一个可读性和不假设意图的问题。你说

Java generates the default empty constructor; why can't it call it behind the scenes in this case?

但对我来说,Java 在“幕后”隐式调用 Super(A) 构造函数比调用 Super() 更有意义构造函数,忽略 A

就是这样。对于在这种情况下应该(或可能)发生什么,我们已经有两个不同的假设。

Java 语言的核心原则之一是透明性。程序员应该尽可能地通过查看代码来了解会发生什么,有时会牺牲语法级别的便利性或魔力

与此平行的原则是不假设意图:在程序员的意图似乎模棱两可的情况下,Java 语言有时会倾向于编译错误,而不是通过某种(任意或其他)选择算法自动选择默认值。

关于java - 不能直接调用父类(super class)型构造函数——为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884171/

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