package test;
public class Test {
public static void main(String[] args) {
A a2 = new B(); // 1
a2.display1();
a2.display();
((B) a2).display2(); // 2
((A) a2).display(); // 3
B b1 = new B();
b1.display1(); // 4
}
}
class A {
int a = 10;
void display() {
System.out.println("parent class " + a);
}
void display1() {
System.out.println("parent class " + (a + 10));
}
}
class B extends A {
int a = 30;
@Override
void display() {
System.out.println("child class " + a);
}
void display2() {
System.out.println("child class " + (a + 10));
}
}
答案 0 :(得分:1)
您执行new B()
,因此显然会创建B
个对象。
是的,从类型A
到类型层次结构下的子类型B
。
因为a2
引用了一个B
对象,并且通过查看实际对象的类型是动态确定的(在运行时而不是在编译时)
不,这里根本没有施法。
我不明白你的意思。变量的类型决定了您可以调用哪些方法,但实际调用哪个方法取决于变量引用的对象的实际类型。