为什么下面的代码打印“1”?
class A {
int x = 1;
}
class B extends A {
int x = 2;
}
class Base {
A getObject() {
System.out.println("Base");
return new B();
}
}
public class CovariantReturn extends Base {
B getObject() {
System.out.println("CovariantReturn");
return new B();
}
/**
* @param args
*/
public static void main(String[] args) {
Base test = new CovariantReturn();
System.out.println(test.getObject() instanceof B);
System.out.println(test.getObject().x);
}
}
答案 0 :(得分:13)
答案 1 :(得分:0)
@ kris979虽然您要返回B,但我认为不同之处在于返回类型为A.因此,A中的x值即为1。
答案 2 :(得分:0)
正如Bozho指出的那样 - 实例变量永远不会受到多态性的影响。让我举一个简短的例子。
class Base {
int i = 1;
void method() {
System.out.println("in base");
}
}
class Sub extends Base {
int i = 2;
void method() {
System.out.println("in sub");
}
}
public class Test {
public static void main(String[] args) {
Base obj = new Sub();
obj.method();
System.out.println(obj.i);
}
}
此代码将打印 - 在sub和1