多态的问题 请问一下大家,父类的引用指向子类对象,假如子类有重写父类的方法,有跟父类相同的属性,为什么这引用调用的方法是子类的,调用的属性却是父类的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 属性是不会被子类覆盖的,即子类父类各有自己的属性!而父类的方法却可以被子类覆盖,所以当调用父类所引用的子类对象的方法时会调用覆盖后的方法!其实本质上是每个子类的对象中都包含一个父类的对象(from <<Thinking in java>>),当子类重写父类的方法时子类对象中包含的父类对象就会被覆盖 对于多态,可以总结它为: 一、使用父类类型的引用指向子类的对象; 二、该引用只能调用父类中定义的方法和变量; 三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。详见此文章:Java多态性详解——父类引用子类对象 其实你的问题是java中面向对象的三大特征中的:继承和多态问题!其实计算机语言中的文字表示很多与现实中是一样一样的!继承就是父母的财产让自己的子女继承,这中间子女的财产有哪些呢?一部分是自己辛辛苦苦赚的,另一部分是从父母那里继承下来的(不过他原本属于父母的,只是自己同时也可以拥有了)。而多态里面的重写,其实也是在验证java中的继承问题。重写,顾名思义,就是子类重写父类的方法!如父亲有块金子,你嫌他不好看,给他打成手镯送给自己的女朋友!(这里面所说的是,金子本质上没变,变得是他的形状和用途。这也就是重写的方法名及类型没变,变得是方法体的内容)。现在落实问题,当调用父类方法时,如果该父类的方法同时被子类重写的话。就好比父亲给了儿子(其实父类拥有他的支配权,还有他的管辖),所以你找那个东西(方法),要像儿子要。如果没有给儿子的东西(没有被儿子重写的方法),调用父类的方法还是父类的 为什么调用了System.gc()后finalize()方法没有被调用呢? 菜鸟求助!java的效率比C差很多么? QQ闪烁图标 命令提示符下不能运行程序 tomcat如何实现双机热备? 如何在java程序中得到当前的jvm heap dump的信息 一个奇怪的问题,来自 Thinking in Java 3rd 一个java的简单问题希望各位高手指名一二! 为什么jbuider画的标签、列表框位置不能随心移? Java新手求解答 我在PANEL里面画了一些图形,如何实现鱼眼功能? 求助:JApplet,JFrame,JPane的问题。
而父类的方法却可以被子类覆盖,所以当调用父类所引用的子类对象的方法时会调用覆盖后的方法!
其实本质上是每个子类的对象中都包含一个父类的对象(from <<Thinking in java>>),当子类重写父类的方法时
子类对象中包含的父类对象就会被覆盖
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。详见此文章:Java多态性详解——父类引用子类对象
其实计算机语言中的文字表示很多与现实中是一样一样的!
继承就是父母的财产让自己的子女继承,这中间子女的财产有哪些呢?一部分是自己辛辛苦苦赚的,另一部分是从父母那里继承下来的(不过他原本属于父母的,只是自己同时也可以拥有了)。而多态里面的重写,其实也是在验证java中的继承问题。重写,顾名思义,就是子类重写父类的方法!
如父亲有块金子,你嫌他不好看,给他打成手镯送给自己的女朋友!(这里面所说的是,金子本质上没变,变得是他的形状和用途。这也就是重写的方法名及类型没变,变得是方法体的内容)。现在落实问题,当调用父类方法时,如果该父类的方法同时被子类重写的话。就好比父亲给了儿子(其实父类拥有他的支配权,还有他的管辖),所以你找那个东西(方法),要像儿子要。
如果没有给儿子的东西(没有被儿子重写的方法),调用父类的方法还是父类的