黑马程序员技术交流社区

标题: 求一下结果,为啥 [打印本页]

作者: anuo    时间: 2015-12-28 22:00
标题: 求一下结果,为啥
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);
    }
}


作者: 愿随风丶飘雪    时间: 2015-12-28 23:47
都是20吧,因为i重新赋值了
作者: 洋葱头头    时间: 2015-12-29 09:35
20
10  没问题

作者: 李永佳    时间: 2015-12-29 10:43
楼上正解,A a = b;  System.out.println(a.i);   ,这实在考多态情况中变量的问题,变量出现在多态中只看等到左边,不看右边,所以不管B类中的变量i是什么,结果都是A类中的变量i的值
作者: iori    时间: 2015-12-29 10:52

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
    }
}
作者: iori    时间: 2015-12-29 10:55
我里个去啊,手贱了,我们在发一遍。

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
其实是有两个i变量,有i=10和i=20,他是两块内存,但是a本身是A对象,他是无法访问到i=20的内存地址




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2