Как вызывается конструктор без какого-либо экземпляра, связанного с ним?

1

См. Ниже код:

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?

  • 3
    Но есть экземпляр A . Просто так бывает и экземпляр B
  • 0
    Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что ответ на этот вопрос свидетельствует об отсутствии базовых знаний о принципах ОО, и его следует научить, прочитав хороший учебник, поскольку он слишком широк, чтобы отвечать на SO. docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
Теги:
oop
inheritance
constructor
super

2 ответа

5

B extends A означает, что экземпляр B также является экземпляром A, точно так же, как собака также является животным. Это одновременно, так что совершенно нормально для b=5 иметь смысл, поскольку B также является A и инициализирует поле b в A

  • 0
    Но b является частным и, следовательно, не наследуется классом B
  • 1
    Неважно, если б является частным. Могут быть открытые или защищенные методы, которые выполняют операции, которые включают b в эти операции. Следовательно, даже если это не всегда очевидно, все A инициализируется при создании B.
Показать ещё 4 комментария
0

Проверьте это обсуждение наследования классов и наследования объектов в Java. Согласно JLS, вы сказали бы, что класс B не наследует частное поле b из класса A.

Члены класса, объявленные как private, не наследуются подклассами этого класса.

Однако экземпляр B наследует все данные из A, включая частное поле b.

  • 0
    так что даже без экземпляра A в памяти поле b со значением 5 находится в памяти?
  • 0
    Вы имеете в виду экземпляр B?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню