java三大特性之多态的认识,以及多态的实际应用(一)

本文详细解读了Java中的多态概念,包括多态的体现、实现前提、好处、应用以及弊端。通过实例演示了多态在编程中的实际操作和注意事项,强调了多态在面试中的重要性和学习必要性。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

多态是将子类对象当作__父类__对象来看待,也就是子类对象可以放入父类中 引用

为了充分理解多态,我们可以从以下这几个方面来理解多态。

第一、从多态的体现方面:我们使用多态的时候,创建的是父类的引用,开辟的是子类的空间,由于没有开辟父类的空间,所以是父类的引用指向子类对象,并不是真正的父类自己创建了对象,而且父类对象的引用还可以作为函数参数来接收子类对象哦!

第二、多态实现的前提:必须是类与类之间要有关系,要么继承,要么实现,存在覆盖,其实就是有抽象函数。

第三、从多态的好处:大大提高程序的可拓展性

第四、多态的应用:1.父类对象的引用指向子类对象,其实本质上是一个向上转型,就像int转成double一样,儿子穿了一身爸爸的衣服,扮成了爸爸。2.但变成了爸爸之后,只能使用爸爸特有的技能,儿子怎么能够使用自己本身的技能呢?这时候就需要向下转型,脱下伪装,将父类对象的引用强转成子类类型,就可以使用子类特有的技能了。

第五、多态的弊端:提高了拓展性,但是只能使用父类的引用访问父类的成员。

多态的三个用法:

  • 1, 对象类型不变,

  • 2, 只能对引用调用其引用类型中声明的方法

  • 3, 在运行时,会根据对象的实际类型找子类覆盖之后的方法

下面程序可以很好的解释什么是多态:

一个A类,定义了m1和m2方法

A类的子类B类,覆盖了m2(),添加了m3方法

多态就是 可以把B类对象放入A类的引用里面,就是把子类放入父类引用,A a =new B();

通过这个引用a能调用m1和m2方法,不能调用m3方法,因为A类中没有调用m3,

a. m2是会调用B类中的m2,B类中的m2重写了A类中的m2,所以找的就是B类覆盖之后的m2.

为便于理解程序已加详细注释说明:

package d11;

class duot{

public static void main(String[] args) {

/*多态的使用

Animal类,定义了eat()和sleep()方法,

Animal的子类Dog类,覆盖了sleep类,添加了shout()方法

多态就是 可以把(dog类)对象放入(Animal类)的引用里面,

就是把子类放入父类引用,Animal a =new Dog();

通过这个引用a能调用eat()和sleep()方法,不能调用shout()方法,因为Animal类中没有调用shout(),

a.sleep()是会调用dog类中的sleep(),dog类中的sleep()重写了Animal类中的sleep,

所以a.sleep()找的就是dog类覆盖之后的sleep(). */

Animal a =new Dog();

a.eat();//This is a eat()

//a.shout();//不能调用shout方法,会报错,Animal类中没有调用shout方法;

a.sleep();//sleep 3 hours

/*类型转换

子类引用赋值给父类引用,可以直接赋值。

父类引用赋值给子类引用,必须_强制类型转换,

保证编译通过,但是运行时可能发生 类型转换异常。

*/

//(编译时不出错,运行时可能发生类型转换异常)

//这个强制类型转换其实是给编译器看的,使他不理会这个异常,

//因为Animal类中并不一定装的是这个dog对象。只是可能,

//如果换成Animal a =new Cat();则就会编译不报错运行报错类型转换异常

Dog d =(Dog)a;//引用间的赋值;需要强制类型转换,

d.shout();//这时候就能调用shout方法了,

//instanceof关键字

/*Instanceof 是一个二元运算符组成一个布尔表达式;

使用方法: 引用 instanceof 类名

就是判断该引用所指向的对象 和后边的这个类名是否兼容;

可以把instanceof形象的比喻为 是不是 是就是真,不是就是假;

*/ //例:a里面装的是一个狗

System.out.println(a instanceof Dog);//true a是一个狗

System.out.println(a instanceof Cat);//false a不是一个猫

System.out.println(a instanceof Animal);//true a是一个动物

//instanceof关键字可以规避上面的风险,先判断a里面装的是不是狗

//是去做强转,绝对不会出错,否则不强转;

//所以上面程序可以改为:

if (a instanceof Dog) {

Dog d =(Dog)a;

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值