gpt4 book ai didi

java - 从父类(super class)继承构造函数?

转载 作者:行者123 更新时间:2023-11-30 06:49:45 26 4
gpt4 key购买 nike

我有一个名为 Robot.java 的类:

class Robot {
String name;
int numLegs;
float powerLevel;

Robot(String productName) {
name = productName;
numLegs = 2;
powerLevel = 2.0f;
}

void talk(String phrase) {
if (powerLevel >= 1.0f) {
System.out.println(name + " says " + phrase);
powerLevel -= 1.0f;
}
else {
System.out.println(name + " is too weak to talk.");
}
}

void charge(float amount) {
System.out.println(name + " charges.");
powerLevel += amount;
}
}

还有一个名为 TranslationRobot.java 的子类:

public class TranslationRobot extends Robot {
// class has everything that Robot has implicitly
String substitute; // and more features

TranslationRobot(String substitute) {
this.substitute = substitute;
}

void translate(String phrase) {
this.talk(phrase.replaceAll("a", substitute));
}

@Override
void charge(float amount) { //overriding
System.out.println(name + " charges double.");
powerLevel = powerLevel + 2 * amount;
}
}

当我编译 TranslationRobot.java 时,出现以下错误:

TranslationRobot.java:5: error: constructor Robot in class Robot cannot be applied to given types;
TranslationRobot(String substitute) {
^
required: String
found: no arguments
reason: actual and formal argument lists differ in length

我知道这是指从父类(super class)继承的东西,但我真的不明白问题出在哪里。

最佳答案

这是因为子类在构造时总是需要调用其父类的构造函数。如果父类有一个无参数的构造函数,这会自动发生。但是你的 Robot 类只有一个构造函数,它接受一个 String,所以你需要明确地调用它。这可以通过 super 关键字来完成。

TranslationRobot(String substitute) {
super("YourProductName");
this.substitute = substitute;
}

或者,如果您想给每个 TranslationRobot 一个唯一的产品名称,您可以在构造函数中使用一个额外的参数并使用它:

TranslationRobot(String substitute, String productName) {
super(productName);
this.substitute = substitute;
}

关于java - 从父类(super class)继承构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301008/

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