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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yan 中级黑马   /  2013-8-11 19:32  /  1777 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yan 于 2013-8-13 22:36 编辑

        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);
    }
打印结果是20  10
但是不是b的地址赋给了a 指向同一个引用 那么a和b 应该是同一个值才对啊?如图
   

HWN1N}PWVJCKKC{J6FN3HIH.jpg (18.33 KB, 下载次数: 14)

HWN1N}PWVJCKKC{J6FN3HIH.jpg

HWN1N}PWVJCKKC{J6FN3HIH.jpg (18.33 KB, 下载次数: 20)

内存图

内存图

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

5 个回复

倒序浏览
        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;      这句话是多态,相当于:A a = new B();虽然a保存了b的地址引用,new B()这个对戏那个中有两个i,地址是不一样的,a指向不到b中的i,还是A得i
         System.out.println(b.i);
         System.out.println(a.i);
     }

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

回复 使用道具 举报
   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);
    }
我给你分析一下答案吧。
      B b = new B();//这句话你能理解吧。b.i = 20;
   但是   A a = b;  //这句话是父类引用指向了子类的对象。但是,对于成员变量i,a只能看到在自己的范围内定义的。它看不到子类中的i。所以你打印的b.i = 10;

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

回复 使用道具 举报
如楼上哥们所说,父类的引用指向了子类的对象,父类中的对象访问不到子类的成员变量,两外给你总结几点规律如下:
1: 只要子类定义了与父类一样的方法,调用的永远是被子类重写的方法。
2:非静态的方法与等号右边的对象方法绑定。
3: 静态方法与引用类型的方法绑定,也就是等号左边的绑定。
4: 静态和非静态成员变量与引用类型绑定,也就是等号左边的绑定。

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

回复 使用道具 举报
B b = new B();
A a = b;  //A a=new B();
多态,父类引用指向子类对象。该引用只能调用父类中定义的方法和变量  
这个引用不是真的把b的地址值给了a,见图

评分

参与人数 1技术分 +1 收起 理由
张智文 + 1

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马