gpt4 book ai didi

java - 可以避免在 Java 中默认调用 super() 吗?

转载 作者:行者123 更新时间:2023-12-03 03:51:00 30 4
gpt4 key购买 nike

假设由于某种原因我不想隐式调用默认情况下完成的super()

class Animal {
public Animal() {
System.out.println("Constructing an animal.");
}
}
class Dog extends Animal {
public Dog() {
System.out.println("Constructing a dog.");
}
public static void main(String[] a) {
new Dog();
}
}

有什么方法可以“禁用”创建新 Dog 时调用 super() 的默认行为吗?或者说这在原则上和概念上都是错误的吗?

我的意思是,在某些情况下,您可能只需要子类的构造函数,而不调用基类的构造函数,但仍然继承基类。

最佳答案

如果我理解正确的话,您想要覆盖 Animal 构造函数的行为或者只是不调用它。如果是这样,那么您在概念上是错误的:您总是需要调用 super 构造函数,调用时您唯一可以做的就是提供一个非默认构造函数,即带有参数的构造函数并提供适当的参数来影响该构造函数的行为(例如,通过选择不同的构造函数、传递某种策略/函数对象等)

另一种方法可能是提供默认构造函数正在调用的一些 init() 方法,您可以覆盖该方法,但它存在一些问题,例如:

  • 如果重写的方法尝试访问仅对子类可见的任何内容(例如附加字段),您可能会遇到问题,因为这些尚未初始化。
  • 该方法无法初始化任何最终字段。

关于java - 可以避免在 Java 中默认调用 super() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566202/

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