Динамическая диспетчеризация и механизм проверки типов в Java

Я хотел бы понять, как внутренне представлен объект в java, состоящий из "указателей" на поля и функции в vtables, и как эти внутренние представления изменяются при выполнении присваиваний, неявных приведений и явных приведений, а также как статический и динамический тип проверочные работы.

Рассмотрим пример, расширенный из: Диспетчеризация динамических методов в Java

class A{
int a=10;   
public void show(){ 
    System.out.println("Show A: "+a);
    }
}

class B extends A{
public int b=20;    
public void show(){
    System.out.println("Show B: "+b);
    }
}

class C extends B{
public int c=30;    
public void show(){
    System.out.println("Show B: "+c);
    }
}

Как объекты строятся в памяти? Что происходит, когда есть присвоение (или эквивалентно переданный параметр)? Какая разница в представлении объекта в памяти в следующих случаях?

B bObj = new B();

A aObj = new B();

C cObj = new B();

Что происходит в представлении памяти, когда происходит явное приведение вверх / вниз? Как он проверяет, разрешено ли такое приведение, и как он изменяет информацию о внутреннем представлении и вызове метода.

((A) new A()).show()
((A) new B()).show()
((A) new C()).show()

((B) new A()).show()
((B) new B()).show()
((B) new C()).show()

((B) new A()).show()
((B) new B()).show()
((B) new C()).show()

((A) xObj).show() //xObj being say an unknown object
((B) xObj).show()
((C) xObj).show()

((C) ((A) new B())).show()

Я искал источники по этим темам, но не нашел ни одного хорошего. Если тема слишком широка, было бы полезно, если бы мне дали указание, где я могу изучить это.

0 ответов

Другие вопросы по тегам