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 快捷键 九.总结 一.前 ...
随机推荐
- [windows]c盘瘦身、系统盘清理临时文件、缓存等垃圾文件
前言 虽然现在已经9102年了硬盘空间越来越大越便宜,但win系统用久了系统盘还是会渐渐变小的,公司的电脑系统盘就已经不够用了经常爆红,这个时候两个简单快速高效的办法 1.扩大系统盘空间,可以使用 w ...
- 2-剑指offer: 最小的K个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 代码: // 这种topN问题比较常见的是使用堆来解决,最小的k个 ...
- django bms
1. 创建模型 一对多: 需要在""多""的表创建一个""关键字段"" 关联 就像在mysql的哪项少的比如(书与出版 ...
- Django中ModelViewSet的应用
ModelViewSet源码 class ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateM ...
- Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
第 1 章 Java 多线程技能 本章主要内容 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 1.1 进程和多线程的概念及线程的优点 进程是操作系统结构的基础:是一次程 ...
- 朱石景 201671010457 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- Helm 安装Kafka
helm镜像库配置 helm repo add stable http://mirror.azure.cn/kubernetes/charts helm repo add incubator http ...
- 【java异常】【redis】ERR Client sent AUTH, but no password is set
项目中使用jedis或redisson连接redis时,如果redis没有密码,但在配置文件中写为 spring: redis: database: 0 host: 127.0.0.1 passwor ...
- [codevs1286]郁闷的出纳员
题目描述 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复 ...
- 洛谷P1230智力大冲浪 题解
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...