gpt4 book ai didi

Java抽象类混淆: overridden method not being called

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:05 27 4
gpt4 key购买 nike

所以我有两个类(class)。一种是抽象的:

public abstract class AbstractClient {
protected boolean running = true;

protected void run() {
Scanner scanner = new Scanner(System.in);
displayOptions();
while (running) {
String input = null;
while (scanner.hasNext()) {
input = scanner.next();
}
processInputCommand(input);
}
}

abstract void displayOptions();

abstract void processInputCommand(String input);

}

一个是具体的子类:

public class BasicClient extends AbstractClient {
private IBasicServer basicServer;

public static void main(String[] args) {
new BasicClient();
}

public BasicClient() {
try {
System.setSecurityManager(new RMISecurityManager());
Registry registry = LocateRegistry.getRegistry();
basicServer = (IBasicServer) registry.lookup(IBasicServer.LOOKUPNAME);
run();
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
void displayOptions() {
BasicClientOptions.displayOptions();

}

@Override
void processInputCommand(String input) {
// TODO Auto-generated method stub

}
}

现在在子类中我调用了抽象类的 run() 方法,因为这应该对所有客户端都是通用的。 run() 方法内部是对抽象方法 displayOptions() 的调用。

我已经在子类中覆盖了 displayOptions(),所以我假设它会调用子类方法,但它似乎没有。有没有办法做到这一点,或者我是否犯了一个明显的错误,或者我是否误解了抽象类应该如何工作?

P.S 我尝试在子类 displayOptions() 中放置一个打印语句,以确保我没有用我调用的方法做一些愚蠢的事情。

非常感谢,

亚当

最佳答案

也许您的 BasicClientOptions.displayOptions() 调用有问题。我想知道你怎么知道 BasicClient.displayOptions() 没有被调用。

这是您所拥有内容的简化版本。尝试运行它。它的行为符合您的预期。

public abstract class BaseClass {
public void run() { foo(); }
public abstract void foo();
}

public class Subclass extends BaseClass {

public static void main(String[] args) { new Subclass().run(); }

@Override
public void foo() {
System.out.println("I'm from the subclass");
}
}

关于Java抽象类混淆: overridden method not being called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647017/

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