Каков порядок вызова метода, когда у вас есть абстрактный класс с реализованным поведением метода, а также когда не реализовано поведение?
Допустим, мой абстрактный класс называется Abs и у него есть два подкласса: Sub1 и Sub2
.
В случае 1 Abs содержит код реализации метода Meth1
public abstract class Abs{
public void Meth1(){
//Some code
}
}
В совершенно другом классе у меня есть метод:
MyMethod(Abs a){
a.Meth1();
}
, где я передаю Sub1 или Sub2 вместо Abs
В случае 2 Abs не содержит код реализации (но Sub1 и Sub2 содержат)
public abstract class Abs{
public abstract void Meth1();
}
и я звоню так же:
MyMethod(Abs a){
a.Meth1();
}
после передачи в Sub1 или Sub2.
Каков порядок вызовов методов в каждом случае? Всегда ли это идет к суперклассу Abs, а затем к подклассу? Сначала идет к подклассу, потому что подкласс был передан в качестве параметра, затем JVM проверяет, есть ли код реализации, предоставленный в подклассе, и если нет, то метод суперкласса вызывается, если есть код реализации?