返回信息流public class Test {
public static void main(String[] args) {
B subObj = new B(6, 9);
subObj.setValue(7, 8);
int m = subObj.multiply();
System.out.println(m); //54
}
}
class A{
int x, y;
public void setValue(int i, int j) {
System.out.println("A setValue");
x = i;
y = j;
}
int multiply(){
System.out.println("in A x="+x+" y="+y);
return x * y;
}
}
class B extends A{
int x, y;
B(int i, int j) {
System.out.println("B constructor");
x = i;
y = j;
}
int multiply(){
System.out.println("x="+x+" y="+y);
return x * y;
}
}
结果为54,想不明白,求牛人解析
这是一条镜像帖。来源:北邮人论坛 / java / #18840同步于 2011/6/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求解释(java源码)
welcome2008
2011/6/16镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
父类的xy和子类的xy不是一个东西,你setvalue设置的是父类的xy,但是mutiply因为子类重载了,所以调用的子类的mutiply,输出的是你子类xy相乘结果,子类xy在constructor里面赋值6,9么。。。
当继承类中的成员变量与父类中的成员变量重名时,隐藏父类的成员变量。
若想得到父类成员变量的引用,可以调用从父类继承来的成员函数来得到。
class A{
int i = 1;
public int getI(){
return this.i;
}
}
Class B extends A{
int i;
}
B b = new B();
b.getI();//get the i of A
//OR
super.i;//get the i of A
this.i;//get the i of B
我觉得这个问题的关键是this 与super 的问题。setValue()中x,y的引用是父类中的x,y,而非子类的x,y。不妨将A类中setValue()中的x,y都写成,this.x = i; this.y = j,这样就容易理解了。