【发布时间】:2018-07-10 14:34:09
【问题描述】:
假设我的代码是,
class A {
void print() {
System.out.println('A');
}
}
class B extends A {
@Override
void print() {
System.out.println("B");
}
}
class C {
void print(A a) {
System.out.println("AA");
}
void print(B b) {
System.out.println("BB");
}
}
class test {
C c = new C();
c.print(new B()); // line 3
}
当我运行这段代码时,第 3 行打印出“BB”。如果我在 C 类中删除我的方法 void print(B b),则第 3 行将打印“AA”。我知道多态性、继承和按值传递的概念。我的问题是,当我删除 C 类中的方法时,为什么 new B() 的引用类型是 B 类型并且是 A 类型。这是我错过的某种官方规则吗?在编译阶段和运行阶段会发生什么?
【问题讨论】:
-
提示:
new B()不是匿名对象,是B类型的对象。