So I have two classes. One is abstract:
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()方法,所以我认为它会调用子类的方法,但似乎并没有。是否有方法可以实现这一点,或者我犯了一个明显的错误,或者我对抽象类的工作原理存在误解?
顺便说一句,我尝试在子类的displayOptions()方法中放置了一个打印语句,以确保我没有使用我调用的方法做了傻事。
非常感谢,
亚当