A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© anuo 中级黑马   /  2015-12-28 22:00  /  862 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A {
public int i = 10;
   }
   class B extends A{
                   public int i = 20;
   }
public class Test{
           public static void main(String args[]){
              B b = new B();
               A a = b;  
        System.out.println(b.i);
        System.out.println(a.i);
    }
}

6 个回复

倒序浏览
都是20吧,因为i重新赋值了
回复 使用道具 举报
20
10  没问题
回复 使用道具 举报
楼上正解,A a = b;  System.out.println(a.i);   ,这实在考多态情况中变量的问题,变量出现在多态中只看等到左边,不看右边,所以不管B类中的变量i是什么,结果都是A类中的变量i的值
回复 使用道具 举报

class A {
public int i = 10;
   }
   class B extends A{
                   public int i = 20;//因为B继承A所以这里i被重新给值为20
   }
public class Test{
           public static void main(String args[]){
              B b = new B(); // 这里访问B的无参构造,因为你没写,所以系统自动给出,并对B 类进行初始化。
               A a = b; (这里可以理解为A a = new B()) // 把父类中的i(这里值是10)给a也可以理解为
        System.out.println(b.i); //访问B类中的成员变量i,上面已经说了,值已经改变为20
        System.out.println(a.i);//上面我们已经讲过了A
    }
}
回复 使用道具 举报
我里个去啊,手贱了,我们在发一遍。

class A {
public int i = 10;
   }
   class B extends A{
                   public int i = 20;//因为B继承A所以这里i被重新给值为20
   }
public class Test{
           public static void main(String args[]){
              B b = new B(); // 这里访问B的无参构造,因为你没写,所以系统自动给出,并对B 类进行初始化。
               A a = b; (这里可以理解为A a = new B()) // 把父类中的i(这里值是10)给a也可以理解为
        System.out.println(b.i); //访问B类中的成员变量i,上面已经说了,值已经改变为20
        System.out.println(a.i);//上面我们已经讲过了A a = new B() ,这里其实就是多态,多态的成员变量访问特点是编译看左边,运行看左边,所以看的是A类。
    }
}

最后给你提点建议,编程建议见名知意。 你A呀,B呀的把我绕蒙了好几圈。
回复 使用道具 举报
qbwang0 初级黑马 2015-12-29 11:01:13
7#
其实是有两个i变量,有i=10和i=20,他是两块内存,但是a本身是A对象,他是无法访问到i=20的内存地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马