生活中的人物视角

程序中的多态

概念:父类引用指向子类对象,从而产生多种形态

一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定

比如:dog继承了animal

怎么来理解这句代码的意思呢?

举一个例子:

short s = 10;

int num = s;

这两行代码的意思是:创建了个s变量,short类型的占2个字节,然后我们把s这个变量传递给了num,num这里是int类型的,占了4个字节 ,两行代码是可以正常运行的

我们想通过这两行代码表达的意思是:我们从小范围的数据传递给大范围的数据是不会出错的

这里的Animal是dog的父类,范围要比dog的范围大,所以这句代码是可以运行的

父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。

如果子类重写了父类的方法,那么在调用方法时,调用的是子类的重写的方法:官方话:实际运行过程中,依旧遵循覆盖原则,如果子类覆盖了父类中的方法,则执行子类中覆盖后的方法,否则执行子类中的方法

多态的使用场景

场景一:使用父类作为方法形参实现多态

上面的省略的代码,都可以调用这么一块语句完成

场景二:使用父类作为方法的返回值实现多态,使方法可以返回不同的子类对象

向上转型(装箱):

Animal a = new Dog();

父类引用中保存真实的子类对象

把Dog转化成Animal

向下转型(拆箱):

比如我们用父类对象 创建了一个子类对象。父类对象只能调用父类的方法和对象以及子类中重写的方法,怎么办呢?我们想调用子类的对象

我们将a强转为子类对象,就可以调用子类的对象和方法了

向下转型的条件:先存在向上转型:Animal a = new Dog();才有后面的向下转型。向下转型必须转化为原来的类型

思考:在向下转型的时候如何判断出当前的类型呢?你怎么知道他原来的类型呢?这里就引出了Instance of关键字

引用 instance of 类型 // 返回布尔类型结果

总结:

父类引用指向子类的对象,从而产生多种形态。把子类当成父类来看

使用父类作为方法的形参,实现多态(喂养的方法)

使用父类作为方法返回值,实现多态(购买动物的方法)

Java多态的三个必要条件:

1、 继承

2、 子类重写父类方法

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

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

  1. java多态父类引用指向子类对象为什么不能调用子类特有的方法?

    java多态父类引用指向子类对象为什么不能调用子类特有的方法? 我们在学习java面向对象时都会发现当父类引用指向子类对象不能调用子类特有的方法 首先我们需要了解一下java多态的具体体现 1.一个对 ...

  2. Java多态 父类引用指向子类对象

    原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...

  3. java子类引用指向父类对象_Java多态 父类引用指向子类对象

    Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father  c  =  new  Child()    在c的 ...

  4. Java中父类引用指向子类对象好处

    比如对于HashMap与Map的理解: HashMap 是 Map 接口的常用实现类(Map是一个接口),是一个键值对集合, 建议使用实现接口的方式使用Map,如:Map<String, Obj ...

  5. Java关于父类引用指向子类对象

    1. 首先, java的多态是指子类重写了父类的方法,在程序运行期间(非编译),根据引用指向的"实际对象"来调用对象的方法,子类是不能重写父类的变量的. class Father{ ...

  6. 多态父类引用指向子类对象时,如何调用子类的独有方法?

    父类:A 子类:Person A a1 = new Person(); if(a1 instanceof Person) { System.out.println("true"); ...

  7. java 父类引用指向子类对象---动态绑定

    知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...

  8. Java多态-如何理解父类引用指向子类对象

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

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

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

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

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

最新文章

  1. 嵌入式java闹钟 实验报告_《Java程序设计》第五次实验实验报告
  2. 可扩展性的builder模式的构建方法
  3. equals, hashCode, toString方法重写,深入探究equals
  4. “睡服”面试官系列第十五篇之对象的扩展(建议收藏学习)
  5. 经纬度绘图_用编程赋能工作系列——百度VS高德经纬度互转
  6. 03 tsung测试报告分析
  7. zabbix监控TCP连接状态
  8. ShortcutMapper 是应用程序的键盘快捷键
  9. Android NDK开发之 NDK类型签名
  10. ubuntu目录结构
  11. 基于大数据架构实现景点游客数据分析平台,全国景点游客数据管理系统
  12. 最新全国五级行政区划json文件下载链接 全国最新统计用区划代码和城乡划分代码使用指南
  13. html图片变大不失真,怎么用Photoshop把一张图片放大后让图片不失真?
  14. 基因的entrez ID 跟symbol等其它ID的转换程序
  15. 2019 东北四省赛部分题解 The 13th Chinese Northeast Collegiate Programming Contest
  16. 【Vue】win10启动vue项目报错: errno: -4058, code: ‘ENOENT‘, syscall: ‘spawn cmd‘
  17. Linux Ubuntu输入法安装设置及中文字体安装
  18. WiFi流量劫持—— 浏览任意页面即可中毒!
  19. 微信号开通检测软件选择需谨慎
  20. 如何使用chatGPT生成小红书种草文案

热门文章

  1. 幼儿园教师计算机教学计划,幼儿园教师教学计划.docx
  2. wireshark混杂模式
  3. 跨境物流小包费用怎么计算?
  4. 品优购页面制作过程与方法(笔记)(二)
  5. IDEA配置本地Maven
  6. 物联网中间件期末复习万字速成【邓金绪版课本】
  7. ResultType和ResultMap的区别
  8. 华为防火墙NAT情况下的黑洞路由
  9. 数据中台咋就从“小甜甜”变成了“牛夫人”?
  10. OPPO开放技术平台支持,打造下一代生态势能