gpt4 book ai didi

java - Java中如何避免隐式调用父类的构造函数?

转载 作者:行者123 更新时间:2023-12-01 18:33:05 24 4
gpt4 key购买 nike

我有这段代码,它打印 "A Tree" 两次,"An Oak Tree" 一次。我猜它正在隐式调用Tree类的构造函数作为class Oak extends Tree。无论如何,我可以避免调用父级的构造函数吗?

public class App {
public static void main(String[] args) {
Tree p = new Tree();
Oak m = new Oak();
}
}

public class Tree {
protected String name;

public Tree() {
name = "A Tree";
System.out.println(name);
}
}

public class Oak extends Tree {
public String name = "An Oak Tree";
public Oak() {
System.out.println(name);
}
}

由于我对 Java 的接触很少,所以我很自然地倾向于将 Java 与 Ruby 进行比较。在 Ruby 中,父级的构造函数似乎仅在子级没有构造函数时才会被调用。因此,我正在努力打好基础。

class C
def initialize
puts "C class"
end
end

class D < C
def initialize
puts "D class"
end
end

# class E does not have its own constructor
class E < C
end

C.new #=> C class
D.new #=> D class
E.new #=> C class

最佳答案

避免隐式调用父构造函数的唯一方法是显式调用父构造函数。您无法避免为每个类调用构造函数。

顺便说一句,您不需要将名称存储两次。更简单的方法是执行以下操作。

public class Tree {
protected String name;

public Tree() {
this("A Tree");
}

protected Tree(String name) {
this.name = name;
System.out.println(name);
}
}

public class Oak extends Tree {
public Oak() {
super("An Oak Tree");
}
}

在 Java 中,假设没有合理的理由不调用给定类的构造函数。如果您发现这是一个问题,也许您正在构造函数中执行的操作不仅仅是构造,而且会产生不良副作用。

对象构造应该只是初始化对象。应避免副作用。

关于java - Java中如何避免隐式调用父类的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23266223/

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