论坛首页 招聘求职论坛

结果出乎大部分人的意料

浏览 15245 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-10   最后修改:2011-04-11
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关键字吧
0 请登录后投票
   发表时间:2011-04-10  
A的xy
B的xy

明显是两个东西。
0 请登录后投票
   发表时间: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;
	}
}
0 请登录后投票
   发表时间:2011-04-10  
kimmking 写道
A的xy
B的xy

明显是两个东西。

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

明显是两个东西。

+1

+1
0 请登录后投票
   发表时间:2011-04-11  
方法可以覆盖,变量不可以覆盖吧
0 请登录后投票
   发表时间:2011-04-11  
结果在意料之中!
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics