java学习笔记(day18)

0x00 多态

1.概述

面向对象三大特征:封装性、继承性、多态性。

继承性是多态性的前提。

extends继承或者implements实现,是多态性的前提。

一个对象拥有多种形态,这就是:对象的多态性。

2.多态的格式和使用

代码当中体现多态性,其实就是一句话:父类引用指向子类对象。

格式
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();

3.多态中成员变量的使用特点

  1. 直接通过对象名称访问成员变量:看等号左边是谁,有限用谁,没有则向上找。
  2. 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。

4.多态中成员方法的使用特点

在多态代码当中,成员方法的访问规则是:
看New的是谁,就有限用谁,没有则向上找。

注意:编译看左边,运行看右边。

对比:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边。

5.使用多态的好处

无论右边new的时候换成了哪个子类对象,等号左边调用方法都不会变化。

6.对象向上转型

  1. 对象向上转型,其实就是多态写法:
    格式:父类名称 对象名 = new 子类名称();
    含义:右侧创建一个子类对象,把它当做父类来看待使用。
    注意事项:向上转型一定是安全的。

7.对象向下转型

对象向上转型一定是安全的,没有问题的,正确的,但是也有一个弊端。
对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。

解决方案:用对象的向下转型【还原】。
2. 对象的向下转型,其实是一个【还原】的动作。
格式:子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象,【还原】成本来的子类对象。

注意事项:
以动物举例子。

  1. 必须保证对象本来创建的时候,就是猫,才能向下转型成为猫。
  2. 如果对象创建的时候本来不是猫,现在想要向下转型变成猫,就会报错。
    简单来说,就是你在向上转型的时候是什么,向下转型才能变成什么,如果非要变成别的东西,就会报错。

对象向下转型,类似于强制数据类型转换。

8.使用instanceof关键字进行类型转换

Q:如何才能知道一个父类引用的对象,本来是什么子类?
A:使用instanceof关键字。
格式:
对象 instanceof 类型
这将会得到一个布尔值结果,也就是判断前面的对象能不能当做后面类型的实例。

posted @ 2020-10-16 21:27  小明-o3rr0r  阅读(95)  评论(0编辑  收藏  举报