引用变量和对象

时间:2015-07-13 01:41:21

标签: oop object inheritance reference polymorphism

我想知道为什么这不起作用,因为编译器为什么不在计算机类中调用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'另一端的实际对象的类。所以,如果我说的是真的,为什么不调用重启方法?

1 个答案:

答案 0 :(得分:0)

您必须调用基类方法才能实际重新启动。您的方法只是隐藏基本方法。您应该覆盖该方法,然后将其命名为base.restart以执行您想要的操作。