16 多态

作者: ca8519be679b | 来源:发表于2020-02-20 10:17 被阅读0次

面向对象我们讲过了封装和继承,其中继承就有extends,implements

多态是指一个实例对象继承自父类或者接口,同时兼顾自身的功能和父类,接口的功能,完成多种任务

多态声明

多态如何使用,不外乎下面的2种格式,注意2测不再是同一个类,而是右侧为左侧的继承关系

父类名 变量名 = new 子类名();

或      接口名 变量名 = new 实现类名();

1 2 3

如上3图,我们父类定义2个方法,子类继承父类,重写了fun方法,我们在Demo的main函数里实例化,我们可以看到,我们使用a的fun,执行的是子类的方法,但是也能执行fun2父类方法

多态成员变量使用特点

方法能进行覆盖重写,成员变量不能,多态的情况下,先去本类(等号左侧)去找,如果没有再去继承关系向上去找

4 5 6

如上我们使用的父子类都定义num,Demo的main方法里使用的是多态,我们打印num是Fu即等号左侧的num

7 8

又比如我们在子类里定义了父类没有的age,我们尝试去打印age就不行,因为父类本身没有,只会向上到Object里找(不会向下),没有就会标红

通过成员方法访问成员变量,从new的类往上谁有成员方法,则使用谁,没有则向上查找(子类复写使用子类,未复写使用父类)

9 10

我们在父类定义showNum,子类未定义,当然调用的是父类的showNum,然后这个方法是父类的,所以打印的是Fu类的num

11 12

如上我们子类复写了父类的方法,实际调用的是子类方法

所以我们需要区分成员变量和方法,变量是看左边往上,而方法是右边往上

13

我们为什么使用多态,如上,我们定义了员工类,work方法为抽象我们不知道具体是做什么,我们实现2个子类,每个都有work,我们使用多态,就可以直接使用对象的work即可

自动转换

向上自动转换就是我们常见的多态,左侧为父类,右侧为子类,这样的含义是创建子类对象,当做父类来看待,向上转型是安全的,因为是小范围转向大范围

14

这里需要注意的是一旦向上转型为父类,子类的特有方法就无法使用

15

如上,实例子类Cat转型为Animal,子类除了父类的eat还有catchMouse方法,但是向上转型后无法使用这个方法,如果我们还是想用这个方法,就涉及到对象向下转型

向下转型格式 子类名称 变量名 = (子类名)父类转型对象;这里就是将父类对象还原成子类对象,这强制类型转换必须要求父类是有当前子类转换成的,如本来是只猫,向上变成动物,然后可以强制转换成猫,但不能变成一只狗

16

如上,我们尝试将猫向上转换的animal还原成猫是可以的,但是转换成狗会编译能通过,但是运行报错,提示类型转换异常

instanceof进行类型判断

我们有了类型转换,就需要判断父类引用对象到底是什么子类转换来的呢

对象 instanceof 类名     返回bool值

17

如上,注意的是,这里instanceof属于特殊格式,没有点和括号

相关文章

  • 16 多态

    面向对象我们讲过了封装和继承,其中继承就有extends,implements 多态是指一个实例对象继承自父类或者...

  • 第一天:java的数据类型

    java特性: 封装、继承、多态、抽象 java的数据类型有: 整型:byte(8) short(16) int...

  • 1.9 多态基本概念

    本小节知识点: 【了解】什么是多态? 【掌握】多态的条件 【了解】多态的优点 1.什么是多态? 什么是多态:多态就...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • 详解Java多态

    详解Java多态 多态定义 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态...

  • 多态

    1.多态 1.多态 1.1 要点 多态是方法的多态,不是属性的多态 多态的存在有三个必要条件:继承;方法重写;父类...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运...

  • Java_basic_10: 多态polymorphism

    多态polymorphism 多态是指对象的多种形态 主要可以分为引用多态和方法多态 继承是多态的实现基础 引用多...

  • 六、多态与虚函数

    多态的基本概念 多态 多态分为编译时多态和运行时多态。 编译时多态主要是指函数的重载(包括运算符的重载)。对重载函...

  • Java基础之面向对象

    1.多态,继承,封装 Java实现多态有哪些必要条件?具体怎么实现?多态的实现原理?多态的作用? 答:多态的优点 ...

网友评论

      本文标题:16 多态

      本文链接:https://www.haomeiwen.com/subject/wzhpfhtx.html