为什么实现了接口或基类的子类可以通过建立一个接口或者基类的变量来引用子类的对象,它们的内存分配是怎样的?这块搞得我有点晕。因为有些变量或者方法在子类中是没有的,而有些则是子类中特有的,感觉这样的引用关系有点乱。请高手帮忙解答一下。

解决方案 »

  1.   

    你的意思是不是这样的?
    比如:Map m=new HashMap();
    Map 是接口 HashMap是其实现类!啊?
      

  2.   

    up!对!是 多态的问题!
    其实也不难理解!就好比!上帝造人一样!有了个模型!只要按照模型去造就OK拉!
    之所以人这么形形色色的!那是人们各自的特征!这上帝造的模型并不没有定义每个人的特征!
    所以你用模型去找某个人的特征,那自然是找不到啦!当然如果你自己去调用自己的那当然没问题啦!
    哈 ……可能这个例子不是很贴切!但愿能帮助你理解!
      

  3.   

    这块的引用我倒是能理解,就是不知道到底在内存中的状态是怎样的?如果我使用强制类型转换将父类转换成子类,这时候基类的引用在内存中的变化是什么样的?这块是不是应该属于jvm范畴了?
      

  4.   

    你用基类的引用调用子类的方法不出错就怪了,基类的引用 只能用基类里的方法,子类的引用可以使用基类的方法,但是如果
    基类的方法被子类重写(覆盖)了,那么引用就会使用子类重写后的方法,当你创建一个子类后,那么在创建继承了基类的子类
    对象时 堆内存出了个子类的对象但是在这个空间里还包括一个基类的对象,如果你十分想了解内存 这里很难给你讲清楚
    你不如下载马士兵java视频第三章的 继承内容看 他把内存分析的很透彻了!