Java多态的三个必要条件:

1、 继承

2、 子类重写父类方法

3、 父类引用指向子类对象

然后看一个例子

输出结果为:

给出结论:Father  c  =  new  Child()    在c的眼里只能看到 child 里面的 father 属性!

                   当满Java多态的三个条件时,可以发现c.eat()调用的实际上是子类的eat(是因为子类重写覆盖了父类方法),

                   但c.age调用的还是父类的age(属性/变量不存在重写和覆盖),而c.play()则不会通过编译。

但是在java的引用中Father不但指定了c以何种方式访问内存,也规定了能够访问内存空间的大小。

我们看Father实例对象的大小是占两行,但Child实例对象占三行(这里就是简单量化一下)。

所以虽然c指向的是Child实例对象,但是前面有Father修饰它,它也只能访问两行的数据,也就是说c根本访问不到Child类中的age!!!只能访问到Father类的age,所以输出40

我们看到Parent的方法表占三行,Child的方法表占4行,c虽然指向了Child类的实例对象,

而对象中也有指针指向Child类的方法表,但是由于c受到了Father的修饰,通过c也只能访问到Child方法表中前3行的内容!!!!

然而前面说过,在方法表的形成过程中,子类重写的方法会覆盖掉表中原来的数据,也就是Child类的方法表的第三行是指向Child.eat的引用,

而不是指向Parent.eat(因为方法表产生了覆盖),所以c访问到的是Child.eat。也就是子类的方法!!!这种情况下,c是没有办法直接访问到父类的eat方法的。

父类对象指向子类引用相关推荐

  1. 父类指针指向子类对象的问题、父类对象和子类对象之间的问题

    一.父类指针指向子类对象 先上代码: class Base {public:void base_fun1() {}virtual void base_fun2() {cout << &qu ...

  2. 父类的对象指向子类对象,父类可以调用子类的方法吗?

    例如父类Person指向子类Student: Person p = new Student(); 父类类型实例p可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的: ...

  3. 父类对象由子类实例化【转载】

    这个涉及到对象的多态性. 父类对象由子类实例化,即是对象的多态性中的一种类型之一:向上转型 父类 父类对象=子类实例 意思就是说:我们是使用子类来实例化对象,而这个对象却是披上了"父类对象& ...

  4. 父类指针指向子类实例,用父类指针调用虚函数,调用的是子类的函数还是父类的函数...

    父类指针指向子类实例,用父类指针调用虚函数,调用的是子类的函数还是父类的函数 以下程序的显示结果是什么,为什么 #include <iostream> using namespace st ...

  5. 父类指针指向子类对象,子类指针不能指向父类对象

    class Parent { public:int a };class Child :public Parent { public:int b; }Parent类占内存大小范围:int a; 占4个字 ...

  6. 多态之父类引用指向子类对象

    首先,这是多态的知识,多态有三要素: 继承 , 重写父类的方法 , 父类引用指向子类对象 以下是我对于多态的一些理解,如有不当,还请指正! 一,多态的概念与特征: 1.什么多态 多态是同一个行为具有多 ...

  7. java父类引用子类_java多态,如何理解父类引用指向子类对象

    要理解多态性,首先要知道什么是"向上转型". 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求 ...

  8. 父类(指针、引用)指向子类对象

    父类(指针.引用)指向子类对象 1. 父类类型指向子类对象 include <stdlib.h> #include <iostream> using namespace std ...

  9. 父类引用指向子类对象的注意点

    父类引用指向子类对象的注意点 首先看一段代码: Father类 package JavaSE.lu.duotai;public class Father {static int b=7;int a=5 ...

最新文章

  1. leveldb源码分析:数据插入续(跳表)
  2. 芒果TV 2021 互联网人才招聘
  3. 目标文件(.o)结构的简单了解
  4. Spring——AOP
  5. 【转】js之iframe子页面与父页面通信
  6. 计算图片的宽和高 动态设置图片的位置
  7. 【CF1189D】Add on a Tree【结论】【构造】
  8. [Ubuntu] apt 的用法
  9. C#--Winform开发常见注意事项
  10. ps缩略图补丁 安装一次之后 失效,卸载重新安装提示这个,是什么原因
  11. 读《我喜欢生命本来的样子》记(二)
  12. 本博客通知(亓官劼)
  13. Python函数式编程(fn)
  14. P5149 会议座位 归并
  15. java web 播放音频_用webAudio和canvas实现音频可视化
  16. c#ip138自动获取代码
  17. 典型相关分析(Canonical Correlation Analysis, CCA)
  18. 高中选科策略隐私政策
  19. 凯文凯利 《必然》 读书笔记
  20. IPFS在Ubuntu中的安装步骤

热门文章

  1. 在灰度图像上进行Mean Shift迭代搜索目标 ,一维加权直方图 + 巴氏系数 + Mean Shift迭代
  2. php notempty 标签,php – AllowEmpty vs NotEmpty
  3. 大数据开发 - Java入门2
  4. c++并发编程实战 第一章
  5. 台式计算机耳机有杂音怎么办,小编教你解决电脑耳机有噪音和杂音怎么办几个方法!...
  6. Dfinity(ICP)基础开发教程-5
  7. 【深度学习】生成对抗网络GAN|GAN、WGAN、WGAN-UP、CGAN、CycleGAN、DCGAN
  8. 为什么是三次握手和四次挥手
  9. python:实现连接mysql数据库(附完整源码)
  10. 世界最大射电望远镜(Arecibo)用于探测地外文明