Я хотел бы знать, почему это не работает, так как в том, почему не компилятор вызывает метод перезагрузки в компьютерном классе ...ссылочные переменные и объекты
Рассмотрим следующий сценарий:
I имеют 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» не класс фактического объекта на другом конце ссылки «макинтош ». Итак, если то, что я сказал, верно, почему не запускается метод перезапуска?
Каков ваш ожидаемый результат от этого кода? «Отключение» «Включение» «Перезапуск успешно»? –
@MattMartin Я бы ожидал, что компилятор вызовет метод перезапуска суперклассов, я знаю, что вы обычно делаете super.restart(), но мне любопытно, почему метод перезапуска классов компьютеров не был вызван. – RamanSB
Попробуйте '((Computer) testObj) .restart();' в проблемной строке. Это поведение, которого вы ожидали? Если это так, я могу написать вам полный ответ, объясняющий, почему это работает, и почему ваш исходный код не сделал то, что вы ожидали. Насколько я понимаю, вы знаете, что можете сделать это так, но просто не знаете, почему исходный код не работает. –