从对象的内存角度来理解试试.
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
Father f = new Father();//系统将分配1M内存.
Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
Son s1 = s;//s1指向那1.5M的内存.
Father f1 = (Father)s;//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).
Son s2 = (Son)f;//这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换.
Son s3 = (Son)f1;//这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存.
分享到:
相关推荐
父类引用指向子类对象
父类引用指向子类对象[归纳].pdf
java 子类对象赋值给父类对象的使用,包括代码及详解,个人笔记
父类赋值给子类的一个小方法,仅供学习参考...
因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造方法,由于s中包含了父类的实例,所以s可以调用父类的方法。 下面我们来看一下代码:
父类引用指向子类对象时,没法调用子类特有的方法; 父类引用指向子类对象: java中子类强转父类,实际上依然是子类; 该引用只能调用父类中定义的方法和变量; 如果子类中重写了父类中的一个方法,那么在...
java多态性详解——父类引用子类对象
java多态性详解——父类引用子类对象.pdf
NULL 博文链接:https://2528.iteye.com/blog/1523901
理解父类引用指向子类对象的特性,并了解动态绑定的工作原理。 了解多态时的一些规则,如方法覆盖和类型转换等。 阅读建议: 建议读者在阅读前具备Java的基础知识,包括类、对象、方法和继承等概念。 在阅读过程中...
论JAVA继承机制中父类与子类的关系
java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类
主要介绍了Java父类调用子类的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
有关子类和父类。A是子类,Teacher是父类。A是Teacher 的一种(子类)会继承父类李非私
java,定义父类和子类.pdf
NULL 博文链接:https://fuckdkjlfsaene.iteye.com/blog/767245
从子到父:父类引用指向子类的对象 父类 父类对象名 = new 子类(); 向下转型(强制类型转换) 从父到子:父类引用转为子类的对象 子类 子类对象名 = (子类)父类对象; 好处: 向上转型:父类引用指向子类对象,提高...
java子类重写父类的方法.doc
java代码-使用java解决父类与子类的声明应用的源代码 ——学习参考资料:仅用于个人学习使用!