2015-03-24 3 views
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, конструктор по умолчанию В вызывающую конструктору, который присваивает значение переменной экземпляра б. Мой запрос заключается в том, что переменные экземпляра связаны с экземплярами классов, и мы не создали экземпляр класса A, что означает это присвоение (b = 5)? Также, что действительно означает вызов конструктора A, когда нет экземпляра A?

+3

Но там _is_ экземпляр 'A'. Это просто случается также как экземпляр 'B'. –

+0

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что ответ на этот вопрос показывает отсутствие базовых знаний о принципах OO и его следует обучать, читая хороший учебник, поскольку он слишком широк, чтобы отвечать на SO. https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html –

ответ

5

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

+0

Но b является частным и, следовательно, не наследуется классом B – paidedly

+1

Не имеет значения, является ли b частным. Могут быть общедоступные или защищенные методы, которые выполняют операции, которые включают b в этих операциях. Поэтому, даже если это не всегда очевидно, все элементы A инициализируются при создании B. – markbernard

+1

B все еще имеет b, он просто не может его увидеть; только его унаследованные методы А могут видеть это. –

0

Посмотрите на это discussion о наследовании класса и наследования объектов в Java. По JLS вы могли бы сказать, что класс B не наследует частное поле Ь из класса А.

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

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

+0

, так что даже без экземпляра A в памяти поле b со значением 5 находится в памяти? – paidedly

+0

Вы имеете в виду экземпляр B? –

+0

переменная экземпляра b, определенная в классе A. Она присутствует в памяти, даже если в памяти нет экземпляра A? – paidedly

Смежные вопросы