java吧 关注:1,288,957贴子:12,815,755
  • 18回复贴,共1
class Fu
{
int i=1;
Fu(){
System.out.println(i);
i++;
}
}
class Zi extends Fu
{
int i=10;
Zi(){
System.out.println(i);
i++;
System.out.println(i);
}
}
class Test
{
public static void main(String args[]){
Fu z = new Zi();
System.out.println(z.i); //输出i=2,为什么不是i=11?
}
}


1楼2013-12-06 10:59回复
    如上面的代码中说的 为什么i的值不是11呢?z这个对象在内存中应该指的是子类对象吧,找i的应该先从子类里找的吧?看实际结果却是从父类里找?能告诉我下为什么吗?


    2楼2013-12-06 11:02
    回复
      2025-11-25 02:34:48
      广告
      不感兴趣
      开通SVIP免广告
      成员变量是没有多态性质的,输出的是父类的i……所以值为2……


      3楼2013-12-06 11:04
      收起回复
        class Fu
        {
        int i=1;
        Fu(){
        System.out.println(i);
        i++;
        }
        }
        class Zi extends Fu
        {
        Zi(){
        System.out.println(i);
        i++;
        System.out.println(i);
        }
        public static void main(String args[]){
        int i=10;
        Fu z = new Zi();
        System.out.println(z.i);//为什么i=3?
        }
        }


        4楼2013-12-06 11:20
        回复
          下面这个为什么i=3呢?和上面那个有什么区别呢?麻烦指教下。 @变形白兔


          5楼2013-12-06 11:21
          收起回复
            子类构造器中第一行有默认代码是super()相当于调用父类构造器,通过这行代码会先运行父类构造器然后再回子类中来继续下面


            来自Android客户端6楼2013-12-06 11:44
            收起回复