我想知道为什么这不起作用,因为编译器为什么不在计算机类中调用restart方法......
考虑以下情况:
我有3个课程,如下所示:
public class Computer {
public int compStatus = 0; //0 means off, 1 means on.
public void turnOn(){
this.compStatus = 1;
}
public void turnOff(){
this.compStatus = 0;
}
public void restart(){
if(compStatus ==1){
System.out.println("Turning off");
compStatus = 0;
System.out.println("Turning on");
compStatus = 1;
System.out.println("Restart successful");
}
}
}
现在是子类:
public class Macintosh extends Computer {
public void openXCode(){
if(compStatus == 1){
System.out.println("XCode Compiler opened.");
}
else{
System.out.println("Mac is off.");
}
}
public void restart(){
System.out.println("Mac restarted");
}
}
测试人员类:
public class CompTest {
public static void main(String[] args){
Computer testObj = new Macintosh();
testObj.turnOn();
testObj.restart(); ///ERROR HERE
}
}
我知道编译器检查重启方法是否在引用变量'Computer'的类中,而不是引用'macintosh'另一端的实际对象的类。所以,如果我说的是真的,为什么不调用重启方法?
答案 0 :(得分:0)
您必须调用基类方法才能实际重新启动。您的方法只是隐藏基本方法。您应该覆盖该方法,然后将其命名为base.restart以执行您想要的操作。