阅读 15488 次
发表时间:2011-04-10
package j2se.test;

class A{
	int x, y;
	
	public void setValue(int i, int j) {
		x = i;
		y = j;
	}

	int multiply(){
		return x * y;
	}
}

class B extends A{
	int x, y;

	B(int i, int j)	{
		x = i;
		y = j;
	}

	int multiply(){
		return x * y;
	}
}

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.为什么不是56?

参考:http://bbs.langsin.com/thread-10113-1-1.html
发表时间:2011-04-10
调用被子类隐藏的变量,应该要用super关键字吧
发表时间:2011-04-10
A的xy
B的xy

明显是两个东西。
发表时间:2011-04-10
我承认我错了。
class C {
	public int x, y;

	public void setValue(int i, int j) {
		x = i;
		y = j;
	}

}

class D extends C {
	public int x, y;

	D(int i, int j) {
		x = i;
		y = j;
	}

	public void setValue(int i, int j) {
		super.setValue(i, j);
		x = i;
		y = j;
	}

	int multiply() {
		return x * y;
	}
}
发表时间:2011-04-10
kimmking 写道
A的xy
B的xy

明显是两个东西。

+1
发表时间:2011-04-10
变量的作用域不同而已!
发表时间:2011-04-11
shansun123 写道
kimmking 写道
A的xy
B的xy

明显是两个东西。

+1

+1
发表时间:2011-04-11
方法可以覆盖,变量不可以覆盖吧
发表时间:2011-04-11
结果在意料之中!
发表时间:2011-04-11
C_J 写道
我承认我错了。
class C {
	public int x, y;

	public void setValue(int i, int j) {
		x = i;
		y = j;
	}

}

class D extends C {
	public int x, y;

	D(int i, int j) {
		x = i;
		y = j;
	}

	public void setValue(int i, int j) {
		super.setValue(i, j);
		x = i;
		y = j;
	}

	int multiply() {
		return x * y;
	}
}


94,
子类里调用的是父类的setValue方法,子类里没有这个方法,
改变不了子类里的 x,y 当然是6 9而不是7 8
Global site tag (gtag.js) - Google Analytics