DYA9面向对象中--多态
多态(polymorphic)
多态可以提高代码的复用性,利于代码维护
方法或对象具有多种形态。是面向对象的第三大特征,多态是建立再封装和继承基础之上的
1,方法的多态
重写和重载就体现多态
2,对象的多态(核心)
***1,一个对象的编译类型和运行类型可以不一致***
***2,编译类型在定义对象时,就确定了,不能改变***
***3,运行类型是可以变化的***
***4,编译类型看定义时 = 号的左边, 运行类型看 = 号的右边***
使用多态机制,可以统一的管理主人喂食的问题
public void feed(Animal animal , Food food)
{
}
用父类,可以指向(接收)子类创建对象传入的数据,无需每个子类定义一个方法(传入单个子类对象),直接用父类的编译类型即可
多态注意事项和细节
多态的前提是:两个对象(类)存在继承关系
多态的向上转型:
1,本质:父类的引用指向了子类的对象
2,语法:父类类型 引用名 = new 子类类型();
3,特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限);
不能调用子类中特有成员;
最终运行效果看子类的具体实现!
structure结构
多态的向下转型:
1,语法:子类类型 引用名 = (子类类型) 父类引用;
2,只能强转父类的引用,不能强转父类的对象
3,要求父类的引用必须指向的是 当前目标类型的对象
4,当向下转型后,可以调用子类类型中所有的成员
属性没有重写之说!属性的值直接看编译类型
instanceOf 比较操作符,用于 判断对象的类型是否为XX类型或XX类型的子类型(判断的是对象的运行类型)
Java重要特性:动态(dynamic)绑定机制
1,当调用对象方法的时候,该方法会和该对象的内存地址(运行类型)绑定
2,当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
、
多态的应用
1,多态数组
数组的定义类型为父类类型,里面保存的实际元素类型为子类类型
多态参数
方法定义的形参类型为父类类型,实参类型允许为子类类型
DYA9面向对象中--多态相关推荐
- DYA9面向对象中--super关键字
super关键字 super代表父类的引用,用于访问父类的属性.方法.构造器 基本语法: 1,访问父类的属性,但不能访问父类的private属性 super.属性名: 2,访问父类的方法,不访问父类的 ...
- DYA9面向对象中--方法的重写
方法重写/覆盖(override) 方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称.返回类型.参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法 方法重写注意事项和使用细节 1,子类 ...
- C++中多态的概念和意义
文章目录 1 C++中多态的概念和意义 1.1 函数重写回顾 1.2 多态的概念 1.3 多态的意义 1.4 静态联编和动态联编 2 特殊的虚函数 2.1 构造函数能成为虚函数吗 2.2 析构函数能成 ...
- python中的多态用法_Python面向对象之多态原理与用法案例分析
本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...
- 面向对象编程中多态的快速理解
1,函数重写回顾: 父类中被重写的函数依然会继承给子类: 子类中重写的函数将覆盖父类中的函数: – 重写父类当中提供的函数是因为父类当中提供的这个函数版本不能满足我们的需求,因此我们要重写: – 期望 ...
- 12 Java面向对象之多态
JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...
- 深入Java核心 Java中多态的实现机制(1)
在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...
- 关于python中多态的理解。
学习到多态的时候,不确定自己是否完全理解了python的多态,于是Google观看了众多资料和文献,发现很多编程大佬讲得过于抽象,不便于新手理解,这违背了python的初衷:简单. 所以我在此用通俗一 ...
- swift面向对象之多态与继承
swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注意 继承可以用于类而不能 ...
最新文章
- 重庆商务学校有计算机专业吗,重庆对外经贸学院计算机科学与技术专业
- 《剑指offer》像素翻转
- AGC001 补题小结
- 大数据中常见的端口号 总结汇总大全(最新)
- 与Java EE和Spring的集成架构
- mysql innodb 死锁_mysql innodb 死锁分析
- js 模拟点击_爬虫js逆向之无限debugger--抖音第三方数据分析平台的坑
- 如何成功实现数据治理
- Ubuntu16.04下Nvidia+Cuda8.0+Dynet安装教程
- [Vue CLI 3] 配置 webpack-bundle-analyzer 插件
- (一)Flask 学习 —— Hello World
- wps日期加减算天数_日期相减之后的天数怎么用公式计算 - 卡饭网
- 中州韵输入法 linux 小鹤双拼,Rime输入法配置——小鹤双拼
- ESXI 带网卡realtek驱动下载
- 数字电路-逻辑式化简公式
- 【总结】有三AI所有原创人脸相关的学习资料汇总(2022年12月)
- PeopleSoft概述及开发工具(application desinger)介绍
- 北京的“狗不理”包子与傻X
- 新手必看学习JAVA的N个理由,看阿…
- kubectl查看node状态_【大强哥-k8s从入门到放弃03】查看K8S集群基本信息