作者fcouple (盲人骑瞎马,夜半临深池)
看板java
标题Re: [问题] 认证书籍的问题
时间Wed Jun 17 14:48:13 2015
原文恕删。
手机请切换至整页模式,才看得到排版。
B 继承 A 之後,B、A 都可使用同一块记忆体空间 static int x
当 main() 做了 B b = new B(); 之後
一、它先去呼叫了父类别建构子「super()」,於是对 x + 1,当时
x 的值为 1
二、子类别又做 x--,於是 x 的值为 0
接下来 main() 做了 fun(b)
要注意的是,变数 b 是指向 class B 的实例,class B 已经 override fun()
所以
public static void fun(A y)
{
y.fun();
}
虽然宣告成 class A,但因为 instance 是 class B 所以仍会去呼叫 class B 的
fun()
值从 0 再被减 1 变成 -1
顺便一提,若我程式改成这样呢?
public static void main(String[] argv) {
A a = new
B();
fun(
a);
System.out.println(
a.x);
}
x 仍为 -1,看实例(instance)是谁就好了
程式改成这样呢?
public static void main(String[] argv) {
A a = new
A();
fun(
a);
System.out.println(
a.x);
}
x 的值会为 2,一样,看实例(instance)是谁,就呼叫谁的 fun()
希望有帮到你,祝您工作顺利。金榜提名。
--
※ 编辑: fcouple (211.76.33.33), 06/17/2015 14:49:42