2015-03-18 2 views
2

Я не мог понять, как JVM дает результат 10. Мы не можем создать объект абстрактного класса, тогда как JMV внутренне управляет созданием объекта абстрактного класса.Как JVM создает объект абстрактного класса?

abstract class A { 
    int a = 10; 
} 

class B extends A { 
    int a = 20; 
} 

public class Sample { 
    public static void main(String [] args) { 
     A obj = new B(); 
     System.out.println(obj.a); // prints 10 
     System.out.println(((B)obj).a); // prints 20 
    } 
} 

ответ

4

Он не создает экземпляр абстрактного класса А. Это создает экземпляр конкретного класса В.

Однако, поскольку переменная obj используется для хранения ссылки на объект из тип A, и поскольку члены экземпляра (в отличие от методов) не могут быть переопределены, obj.a возвращает переменную a класса A.

Вы можете убедить себя, что экземпляр B был создан путем добавления к коду:

public class Sample 
{ 
    public static void main(String [] args) { 
     A obj = new B(); 
     System.out.println(obj.a); // prints 10 
     System.out.println(((B)obj).a); // prints 20 
    } 
} 
+0

Err это код от вопроса, дословно? –

+0

@GyroGearless Код в вопросе был отредактирован после того, как я опубликовал свой ответ. – Eran

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