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(多态)的更多相关文章

  1. Java基础学习小记--多态

    题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...

  2. Java之路——敬JAVA初学者(作者:MoMo)

    作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊!    要离开学校了,还是想留 ...

  3. java提高篇之理解java的三大特性——多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  4. Python之路,Day12 - 那就做个堡垒机吧

    Python之路,Day12 - 那就做个堡垒机吧   本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多 ...

  5. JAVA三大特性之多态

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...

  6. Java三大特征之多态(三)

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  7. Java之路——名词解释(一)

    一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...

  8. Java之路——环境配置与编译运行

    本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...

  9. Java之路 ——初识Eclipse

    零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...

随机推荐

  1. flask实战-个人博客-表单

    表单 下面我们来编写所有表单类,personalBlog中主要包含下面这些表单: 登录表单: 文章表单: 评论表单: 博客设置表单: 这里仅介绍登录表单.文章表单.分类表单和评论表单,其他的表单在实现 ...

  2. Linux使用rz命令上传文件

    1.安装 yum -y install lrzsz 2.rz -be命令,选择需要上传的本地文件

  3. 如何用<dl>标签做表格而不用table标签

    我们都知道很多的内容编辑器(TinyMCE编辑器.fck)都有插入表格功能,快速方便,但是这些表格用到的<table>标签,可以查看html源代码就能发现,table标签对搜索引擎不是很友 ...

  4. ajax中什么时候进success和error

    先简单介绍下ajax: 简单的说Ajax请求通过XMLHttpRequest对象发送请求,该对象有四个状态(readyState): -未初始化.-正在初始化.-发送数据.-正在发送数据.-完成. 当 ...

  5. html--前端JavaScript基本内容

    一.JavaScript 变量 在 JavaScript 中创建变量通常称为"声明"变量. 使用 var 关键词来声明变量. 注意: 1.变量必须以字母开头 2.变量也能以 $ 和 ...

  6. python语言(八)多线程、多进程、虚拟环境、unittest、生成测试报告

    一.多线程 进程与线程 进程:进程是资源(CPU.内存等)分配的最小单位,进程有独立的地址空间与系统资源,一个进程可以包含一个或多个线程 线程:线程是CPU调度的最小单位,是进程的一个执行流,线程依赖 ...

  7. Vue 分页功能伪代码实现

    Vue分页功能的实现 其实分页功能是一个比较简单的demo 后端写好pageNum和pageSize的接口直接传参就是了 // 这里我们假设后端已经写好了 pageNum和pagesize <v ...

  8. Console工程下如何不显示控制台黑窗口只显示Windows窗口

    原文地址https://www.cnblogs.com/smiler/p/4575052.html OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口. 其 ...

  9. Python中的next()\iter()函数详解

    什么是可迭代的对象(Iterable,即可以用for循环的对象)和迭代器(Iterator) Iterable: 一类是:list.tuple.dict.set.str 二类是:generator(都 ...

  10. Oracle客户端和服务端菜单区别