Предположим, у вас есть устаревший код Java, который не может быть скомпилирован современной версией Java. например,
public class ProviderUnavailableException extends Exception {
private int cause;
public int getCause(){
return cause;
}
// rest of implementation
}
Во времена Java 1.3 этот код был действителен.
В Java 1.4 класс Throwable «переопределил» метод getCause (). Это выглядит так:
public Throwable getCause()
Теперь устаревший код недопустим (поскольку int не является подтипом Throwable), но не приводит к проблемам во время выполнения. Или это может произойти при некоторых обстоятельствах?
Правильно ли, что во время компиляции компилятор сгенерировал байтовый код для обработки выполнения метода getCause исключительно в этом классе и поэтому «знает», что суперкласс не должен вызываться?
EDIT
Я проверил байт-код устаревшего кода с помощью «javap -c».
public int getCause();
Code:
0: aload_0
1: getfield #2; //Field _cause:I
4: ireturn
Так что это возвращает локальное поле. Кажется, хорошо для меня.