У меня есть 2 класса, один из которых расширяет второй и переопределяет некоторые из методов родителя. Когда я звоню fs.m(ff)
, я получил странный результат, и я не могу понять, почему это происходит. тип First fs
не должен иметь доступ к классу Second methods, даже если мы назначили для них новый Second object, если только мы не набросим его таким образом - (Second) fs.m(ff)
. Может ли кто-нибудь объяснить, почему этот код генерирует вывод «override»?Переопределение методов и странное поведение
public class Main {
public static void main(String[] args) {
First ff = new First();
First fs = new Second();
Second ss = new Second();
System.out.println(fs.m(ff));
}
}
public class First {
public String m(First x){
return "default";
}
public String m(First x, First y){
return "default";
}
}
public class Second extends First{
public String m(Second x){
return "overload";
}
public String m(First x){
return "override";
}
public String m(First x, Second y){
return "???";
}
}
Ах, поэтому он просто ведет себя по-разному во время выполнения против времени компиляции, во время выполнения он проверяет возможность, а во время компиляции он никогда не позволяет это (по праву тоже хех) – user3885166