Java之路---Day12(多态)
2019-10-26-22:40:09
目录:
1.多态的概念
2.多态的分类
3.实现多态的三个必要条件
4.多态的格式
5.多态成员变量的使用特点
6.多态成员方法的使用特点
7.多态的好处
8.多态的向上和向下转型
1.多态的概念:
多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义
2.多态的分类:
编译时多态(静态):主要是指方法的重载,它是根据参数列表的不同来区分不同的方法
运行时多态(动态):它是通过动态绑定来实现的,也就是大家通常所说的多态性。
3.实现多态的三个必要条件:
1. 继承:在多态中必须存在有继承关系的子类和父类。
2.重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。
package demosummary.polymorphic; public class Fu {
//定义两个变量
double d1;
double d2; //无参构造
public Fu() {
} //全参构造
public Fu(double d1, double d2) {
this.d1 = d1;
this.d2 = d2;
} //设置一个方法
public void area(double d1,double d2){
}
}
package demosummary.polymorphic;
//创建一个继承父类的子类
public class Zi extends Fu{
//重写父类中的方法
@Override
public void area(double d1, double d2) {
double result = d1 * d2;
System.out.println("计算结果:"+result);
} //测试方法
public static void main(String[] args) {
//向上转型(多态的写法)
Fu obj = new Zi();
obj.area(3.5,3.5);
}
}
4.多态的格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
5.多态成员变量的使用特点:
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。
package demosummary.polymorphic;
//定义一个父类
public class Fu01 {
//定义一个成员变量
int num = 10;
//定义一个成员方法
public void showNum(){
//定义一个局部变量
// int num01 = 100;
System.out.println(num);
// System.out.println(num01);
}
}
package demosummary.polymorphic; public class Zi01 extends Fu01{
//定义一个成员变量
int num = 20;
//覆盖重写父类方法
@Override
public void showNum() {
//定义一个局部变量
// int num01 = 200;
System.out.println(num);
// System.out.println(num01);
}
//定义一个测试类
public static void main(String[] args) {
Fu01 obj = new Zi01();
System.out.println(obj.num);
obj.showNum();
}
}
6.多态成员方法的使用特点:
在多态的代码当中,成员方法的访问规则是:
看new的是谁, 就优先用谁,没有则向上找。
口诀:编译看左边,运行看右边。
对比一下:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边。
7.多态的好处:
不使用多态的写法:
Teacher one = new Teacher();
one.work();
Assistant two = new Assistant();
two.work();
使用多态的写法:
Employee one = new Teacher();
one.work();
Employee two = new Assistant();
two.work();
对比结论:无论右边new的时候换那个子类对象,等号左边调用方法都不会变化
8.多态的向上和向下转型:
向上转型:
父类名称 对象名 = new 子类名称();
含义:右侧创建一个子类对象,把它当成父类看待使用
注意事项:向上转型一定是安全的,从小范围转向大范围
向下转型:
子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象还原成为本来的子类对象
注意事项
1.必须保证对象本来创建的时候。就是猫。才能向下转型成为猫。
2.如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错。
Java之路---Day12(多态)的更多相关文章
- Java基础学习小记--多态
题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...
- Java之路——敬JAVA初学者(作者:MoMo)
作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊! 要离开学校了,还是想留 ...
- java提高篇之理解java的三大特性——多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- Python之路,Day12 - 那就做个堡垒机吧
Python之路,Day12 - 那就做个堡垒机吧 本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多 ...
- JAVA三大特性之多态
面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...
- Java三大特征之多态(三)
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- Java之路——名词解释(一)
一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...
- Java之路——环境配置与编译运行
本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...
- Java之路 ——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
随机推荐
- idea下新建Spring Boot项目并配置启动
一.操作步骤 ①使用idea新建一个Spring Boot项目 ②修改pom.xml ③修改application.properties ④修改编写一个Hello Spring Boot的Contro ...
- 使用Git管理品优购项目 开始部分
- iview form表单数值类型校验「iview自定义form表单校验器」
摘录iview表单验证 Form 组件基于 sync-validator 实现的数据验证,给 Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. ...
- 在CentOS 7 中安装Docker
https://birdteam.net/135360 sudo systemctl enable docker sudo systemctl start docker
- OpenResty: 介绍 (摘抄)
原文链接:https://www.cnblogs.com/duanxz/p/10396160.html Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM ...
- 开发中常用linux命令
1.创建目录mkdir 创建目录命令,常用的参数-p,递归创建目录 [root@web01 ~]# mkdir /data [root@web01 ~]# mkdir /data/a/b mkdir: ...
- Java实现AES加密(window机器和linux机器) 注意window机器 和linux机器算法稍有不同
一)什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. ...
- 删除list集合中某些数据
去除list集合中不符合条件的数据 List<DictVo> applyStateList = SingletonHoldResource.getInstance().getList(Fr ...
- Spring boot2X集成zuul与consul实现负载均衡和反向代理
zuul 是netflix开源的一个API Gateway 服务器 所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序. 作为一个边界性质的应用程序,Zuul提供了动态路由.监控 ...
- windows7 安装 docker-compose
这篇博客,默认你已经安装了docker,下面介绍如何安装docker-compose 1.访问docker-compose的git地址 2.找到最新版的docker-compose 3.打开Docke ...