and*_*and 1 java methods overriding
考虑一下:
class A {
int x =5;
}
class B extends A{
int x =6;
}
public class CovariantTest {
public A getObject() {
return new A();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
CovariantTest c1 = new SubCovariantTest();
System.out.println(c1.getObject().x);
}
}
class SubCovariantTest extends CovariantTest {
public B getObject(){
return new B();
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,JVM根据其对象的真实类型选择一种方法.这里的真实类型是SubCovariantTest,它定义了一个覆盖方法getObject.
该程序打印5,而不是6.为什么?
Meh*_*ari 10
该方法确实由对象的运行时类型选择.运行时类型未选择的是整数字段 x
.对象x
存在两个副本B
,一个用于A.x
,一个用于B.x
.你是静态的选择领域A
类,因为编译时通过返回的对象的类型getObject
是A
.可以通过向A
和添加方法来验证此事实B
:
class A {
public String print() {
return "A";
}
}
class B extends A {
public String print() {
return "B";
}
}
Run Code Online (Sandbox Code Playgroud)
并将测试表达式更改为:
System.out.println(c1.getObject().print());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
200 次 |
最近记录: |