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. 记一次wsl上的pip3安装失败问题 The following packages were automatically installed and are no longer required:

    转载请注明来源.https://www.cnblogs.com/sogeisetsu/.然后我的CSDNhttps://blog.csdn.net/suyues/article/details/103 ...

  2. Memcache未授权访问漏洞简单修复方法

    漏洞描述: memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏 ...

  3. 网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例

    UDP协议 (了解) 称之为数据包协议,又称不可靠协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需 ...

  4. python基础之函数重点

    函数的返回值 现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪. 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值. 需要注意的是: return是一个函数结束的 ...

  5. .Net反射-基础2-BindingFlags参数

    BindingFlags参数用于指定反射查找的范围在调用下列方法时会用到BindingFlags参数 // 调用方法. InvokeMethod // 创建实例. CreateInstance // ...

  6. LNMP+memcached

    部署LNMP+memcached网站平台,通过PHP页面实现对memcached服务器的数据操作,实现以下目标:部署LNMP实现PHP动态网站架构为PHP安装memcache扩展创建PHP页面,并编写 ...

  7. python paramiko模块简介及安装

    一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...

  8. vue之父子组件通信

    一. 父-子组件间通信 let children={    template:`<div><h1>{{send}}</h1></div>`,  # 将传 ...

  9. Redis有哪些数据结构

    String 这应该是应用最广泛的了,简单的 key-value 类型.value 不仅可以是 String,也可以是数字.还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模 ...

  10. 实验三:Linux进程管理(HDU)

    2.设计内容 把下面的几个网址的内容看懂,关于Linux的通信机制就会有个基本的了解了,后面的这几个代码也应该可以看得懂了. 管道通信:https://blog.csdn.net/ljianhui/a ...