gpt4 book ai didi

java - 在规划继承时,是否允许构造函数调用可重写的方法?

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

来自 Effective Java 第 2 版,第 17 项:

For each public or protected method or constructor, the documentation must indicate which overridable methods the method or constructor invokes

稍后在同一项目中它说:

Constructors must not invoke overridable methods, directly or indirectly.

这两个说法是不是自相矛盾,还是我遗漏了什么?

最佳答案

在构建过程中调用可覆盖的方法是允许的 - 这没有任何违法行为。

在构造期间调用可覆盖方法不可取 - 通常不建议在构造期间调用可覆盖方法,因为这会导致暴露不完整的对象并限制系统的可预测性。 p>

public class A {

final int a;

public A() {
a = method();
}

protected int method() {
return 42;
}

@Override
public String toString() {
return "A{" + "a=" + a + '}';
}

}

public class B extends A {

@Override
protected int method() {
System.out.println("this=" + this);
return 96;
}

}

public void test() {
System.out.println("B = " + new B());
}

请注意,您的第一个引用仅指文档,而不是代码。我建议唯一的问题是在应该可能更合适的时候使用必须

关于java - 在规划继承时,是否允许构造函数调用可重写的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453081/

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