gpt4 book ai didi

java - 在构造函数中运行方法

转载 作者:行者123 更新时间:2023-11-30 07:37:26 25 4
gpt4 key购买 nike

我是新手。所以,我找不到确切的词语来解释我想做的事情。我会尽力解释。

我创建了一个扩展某些基类的类。在基类中,我有一些使用对象特定信息来运行的方法。我的意思是我们用构造函数定义。

因此,在扩展我的基类的类中,我使用 super 创建了一个构造函数,我可以在构造函数中调用一些基类方法,以便在对象创建后自动运行吗?

像这样:

class Base {
String someInfo;

Base(String someInfo) {
this.someInfo = someInfo;
}

String someMethod() {
return someInfo;
}
}

class MClass extends Base {

MClass(String someInfo) {
super(someInfo);
someMethod();
}
}

最佳答案

您的问题更多的是关于理论,而不是实践。

实际上 - 你可以。但你不应该做这样的事情。这是关于代码气味和难以发现的错误的可能性。看看这个示例

class Base {
private final String t;
private final int length;
Base(String t) {
this.t = t;
length = this.t.length();// here you'll got NullPointerException
}
}
class Override {
Override() {
super(calculate());
}
String calculate() {
return "Override";
}
}
class OverrideB {
private final String b = "some string";
OverrideB() {
}
String calculate() {
return b;
}
}

在当前示例中,当您尝试创建 OverrideB 实例时,您将得到 NullPointerException - 因为 b 在当前尚未实例化时刻(你可以自己检查 - 这是关于构造函数调用的顺序)。但您必须选择避免此问题的方法:

  • 私有(private)方法(它们不能被覆盖,只能隐藏在子类中)
  • final方法(与私有(private)方法相同,但它们甚至不能隐藏,并且可用于所有子类)

PS 根据类名称约定,您应该将 mClass 命名为 MClass

关于java - 在构造函数中运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190381/

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