См. Ниже код:
class A {
private int b;
A(){
b=5;
}
}
class B extends A {
}
class C {
public static void main(String args[]){
B b=new B();
}
}
Когда я создаю экземпляр B, конструктор по умолчанию B вызывает конструктор A, который присваивает значение переменной экземпляра b. Мой запрос заключается в том, что переменные экземпляра связаны с экземплярами классов, и мы не создали какой-либо экземпляр класса A, что означает это присвоение (b = 5)? Также, что означает вызов конструктора A, когда нет экземпляра A?
B extends A
означает, что экземпляр B
также является экземпляром A
, точно так же, как собака также является животным. Это одновременно, так что совершенно нормально для b=5
иметь смысл, поскольку B
также является A
и инициализирует поле b
в A
Проверьте это обсуждение наследования классов и наследования объектов в Java. Согласно JLS, вы сказали бы, что класс B не наследует частное поле b из класса A.
Члены класса, объявленные как private, не наследуются подклассами этого класса.
Однако экземпляр B наследует все данные из A, включая частное поле b.
A
. Просто так бывает и экземплярB