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方法的。

java子类引用指向父类对象_Java多态 父类引用指向子类对象相关推荐

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

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   C ...

  2. java子类引用指向父类对象_java 中父类引用指向子类对象时

    继承和方法重写已经很熟悉了,这次 主要验证一下,当一个父类的引用指向一个对象的时候,它会调用子类的方法,而不是父类的. 引用在栈内存中存在对象的内存地址.真正的对象(通过 new Student()创 ...

  3. java子类和父类实例_java中父类与子类之间的转换示例

    java中父类与子类之间的转换示例有以下三点: 示例一 父类强制转子类 pre class="brush:php;toolbar:false">Father f = new ...

  4. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  5. java 上转型对象_Java上转型和下转型对象

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 上转型对象:子类创建对象 并将这个对象引用赋值给父类的对象. 语法格式:Father f=new Son(); 注 ...

  6. 如何销毁一个实例化对象_JAVA中如何创建和销毁对象

    第1条 考虑用静态方法代替构造器 类可以通过静态工厂方法来提供它的客户端,而不是通过构造器.提供静态工厂方法而不是公有构造器,这样做具有几大优势. 1.静态工厂方法与构造器不同的第一大优势在于,它们有 ...

  7. java 获取子类实际的类型名_Java 泛型类 以及 泛型类获取子类的具体参数类型 以及 获取子类型具体参数的实例...

    前言: 要点都在代码注释中 1.泛型类 GenericInterface package com.demo.generic; import java.lang.reflect.Parameterize ...

  8. java 注解 对象_Java基础-学习使用Annotation注解对象

    Java基础-学习使用Annotation注解对象 注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某 个时刻非常方便地使用这些数据 1-1:基本语法 Java S ...

  9. java中数组的引用是什么意思_java数组的引用有什么意义

    java中的数组引用就是让数组b直接指向数组a(即b = a;).在java编程中这样做的目的是为了提高程序运行的效率. 试想一下,假如数组中有上万个元素,在拷贝数组时,如果将数组a的所有元素都一一拷 ...

最新文章

  1. 【POJ】3268 Silver Cow Party (将有向图的边反转)
  2. android studio编译JNI问题ninja: fatal: couldn‘t open nul的解决
  3. python word2vector (三)
  4. 求解两个非负整数的最大公约数(C语言实现)
  5. Java的IO操作(二) - 带缓冲区的流对象、写入基本数据类型、实现命令行中的copy命令...
  6. CentOS 6.3 升级软件 gcc等,并安装部署DNN环境 (未完成,不完整)
  7. MapReduce-多个Mapper
  8. scala编程_Scala编程语言简介
  9. 威漫哨兵机器人_漫威:哨兵机器人天下无敌?这几位变种人就不把他们放在眼里...
  10. 救活了一只溺水的小巴西龟
  11. 跟着b站大学学习C语言--哔哩大学计算机学院
  12. SpringMVC ResponseBody返回字符串带双引号解决
  13. 2021-05-18 人头检测 version-slim(主干精简速度略快),version-RFB(加入了修改后的RFB模块,精度更高)
  14. P6专题:P6 EPPM和PPM基本概念
  15. 子域名扫描工具-subDomainsBrute
  16. nodejs学习_安装npm及cnpm(Windows)
  17. vue学习笔记(三)之vuex
  18. TodoList案例
  19. Azure机器学习——Azure机器学习介绍
  20. if(!)什么意思?

热门文章

  1. linux系统怎么看raid,linux如何查看硬盘及raid信息
  2. java中中国货币符号怎么打_用Java中的货币符号解析价格
  3. java 判断是否是int_java判断是否int类型的方法
  4. MySql尚硅谷入门(四)
  5. 学做菜 (JAVA)
  6. 专家展望未来5年深度学习发展趋势
  7. Golang语言社区——为什么说未来 5 年将是 Go 语言的天下?
  8. 眉骨高者为大贵之相_八大天生富贵命骨相
  9. android切割音视频
  10. 我的python世界_请前辈看看我的python世界周游世界算法