Я ищу способ объяснить, как следует отслеживать следующую Java-программу (какой метод вызывается и т. Д.), Особенно как модификатор доступа и наследование влияют на вызов метода.
У меня есть два класса A и B, где B расширяет A.
Класс А имеет закрытый метод process()
Класс B имеет открытый метод process()
Класс A имеет открытый метод callProcess()
, который вызывает process()
.
В основной программе я создаю объект B и вызываю метод callProcess()
.
class A {
private void process(){
System.out.println("Process A.");
}
public void callProcess(){
process();
}
}
class B extends A {
public void process(){
System.out.println("Process B.");
}
}
class MethodTest{
public static void main(String[] args){
B b1 = new B();
b1.callProcess();
}
}
Я ожидаю, что process()
из B вызывается, поскольку объект, который вызывает process()
, относится к типу B, но происходит то, что process()
из A вызывается.
Что страннее, если я изменю модификатор process()
в A на public, тогда будет вызван process()
в B.