public class Solution {
public static void main(String[] args) {
new B(6);
}
public static class A {
private int f1 = 7;
public A(int f1) {
this.f1 = f1;
initialize();
}
private void initialize() {
System.out.println(f1);
}
}
public static class B extends A {
protected int f1 = 3;
public B(int f1) {
super(f1);
this.f1 += f1;
initialize();
}
protected void initialize() {
System.out.println(f1);
}
}
}
В этом примере в конструкторе класса А будет вызван метод initialize() класса А, но если сделать так, то уже вызывается метод класс В, который не успел инициализировать свою переменную f1:
public class Solution {
public static void main(String[] args) {
new B(6);
}
public static class A {
private int f1 = 7;
public A(int f1) {
this.f1 = f1;
initialize();
}
---->protected void initialize() {
System.out.println(f1);
}
}
public static class B extends A {
protected int f1 = 3;
public B(int f1) {
super(f1);
this.f1 += f1;
initialize();
}
protected void initialize() {
System.out.println(f1);
}
}
}
Если второй пример я смутно осознаю (хотя до конца всё равно нет), то первый - совершенно не понимаю.
Почему сужение области видимости (private) позволяет вызвать метод родителя?
Так же объясните ,пожалуйста, что происходит на самом деле и почему в том примере, где из конструктора родителя вызывается метод наследника.