黑马程序员技术交流社区
标题: 求一下结果,为啥 [打印本页]
作者: 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 |