[英]Default Reference Type of anonymous object in Java
假设我的代码是,
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”。 我知道多态,继承和传值的概念。 我的问题是为什么new B()
引用类型是B
类A
当我删除C类中的方法时,它是A
类型。我错过了某种官方规则吗? 在编译阶段和运行时阶段会发生什么?
B
是A
的孩子。 所以B
可以用来代替A
因此,当您删除类型为B b
的方法时。 它直接选择A a
方法,没有混淆。
当有多个方法可以使用相同的规则(重载)访问时,会发生混淆。 在那种情况下, 将选择最具体的方法 。 在不存在的方法与B a
, A a
将被选择,并且当存在B b
将被选择,因为B
比最具体的A
用于与所述类型的方法B a
。
因此,在具体选择链中, Child
最重要, Parent
最少。
B > A > ... > .. >Object
如果多个成员方法都可访问并适用于方法调用,则必须选择一个为运行时方法调度提供描述符。 Java编程语言使用选择最具体方法的规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.