阅读 15890 次
发表时间:2008-05-21
看到 这样一道题目:

class Test3 {
	int i = 1;
	
	public int f() {return i;}
	
	static String g() {return "Test3";} 
	
}

class Test2 extends Test3 {
	int i = 2;
	
	public int f() {return -i;}
	
	static String g() {return "Test2";} 
	
}

public class Test {
	public static void main(String[] args) {
		 
		 Test2 t2 = new Test2();
		 
		 Test3 t3 = (Test3) t2;
			 
		 System.out.println(t3.i);
		 System.out.println(t3.f());
		 System.out.println(t3.g());
	}

}


结果是什么呢? 自己试了下,但仍然不明白其中的道理. 希望有人帮忙解惑。 谢谢
发表时间:2008-05-21
输出结果:

1
-2
Test3

也想不明白,等楼下解答
发表时间:2008-05-21
关键是那个static 方法.
这个..额...
发表时间:2008-05-21
to aids198311,

对于 1, -2 你知道 原因了? 能说说吗?
发表时间:2008-05-21
这种问题弄明白又如何,弄不明白又如何?

实际开发中绝对不应当允许出现这种语法糖
这是维护者的噩梦

好的品质要靠好的习惯来保证
发表时间:2008-05-21
to armorking,

面试人员 可不会这么想的
发表时间:2008-05-21
这种题确实没意义,不学也罢。
发表时间:2008-05-21
垃圾代码哦
发表时间:2008-05-21
唉, 我今天 笔试的题目阿,很想知道为什么.
发表时间:2008-05-21
子类是无法覆盖父类的static方法的.
由于是父类引用子类实例,所以前面打印1,而非static 方法可以被子类覆盖,所以打印子类方法里的东东!
Global site tag (gtag.js) - Google Analytics