Java中的多态

多态的概述

  1. 多态:事物的多种表现形态,就是多态,polymorphic
    对象的多态性:同一个对象,可能具有不同的名称,同一个对象,有不同的类型的引用指向它。
    本质:同一个物体有不同的名称和描述。
    类型的多态性:同一个类型,可能具有不同的子类实现。同一个类型引用,有不同的对象实现。
    本质:同一个名字和描述,可以在不同场景下有不同的真实实现。
  2. 多态的前提:
    (1)要有子父类的继承(实现)关系
    (2)有方法的重写
    (3)父类的引用指向子类的对象

多态中成员变量的访问特点

  1. 编译看左边,运行看左边
  2. 编译的时候,要看【=】左边的引用的类型中,是否有该变量的定义,如果有,就编译成功,如果没有,就编译失败。
  3. 运行的时候,要看【=】左边的引用所属类型中,真正如何给变量赋值的。获取到的是引用父类的赋值结果。

多态中成员方法的访问特点

  1. 编译看左边,运行看右边
  2. 运行的时候,要看【=】右边的对象所属的类型中,是如何实现这个方法的。最终运行的是子类重写过的方法实现。

多态中静态方法的访问特点

  1. 编译看左边,运行看左边
  2. 编译的时候,要看【=】左边的引用所属的类型中,是否有该方法的定义,如果有,就编译成功,如果没有,就编译失败
  3. 运行的时候,要看【=】左边的引用所属的类型中,如何实现该方法的。最终运行的是引用所属类型中该方法的实现。(静态方法属于类,和父类的方法不属于重写关系)
  4. 静态最终解释:
    1)静态变量:存储在类的字节码中的变量,被所有对象所共享,不随着对象的变化而变化,都有相同的值,所以称为静态变量
    2) 静态方法:只会根据引用所属的父类,来决定运行的内容,运行内容,不会随着子类的变化而变化,都是引用所属的父类的方法实现,所以称为静态方法。

向上向下转型

  1. 向上转型:
    使用子类的引用指向子类的对象(正常情况)
    多态中,使用父类的引用指向子类的对象(向上转型)
    本质:缩小了对象本身的访问范围,减少了访问的权限(只能访问父类中定义的内容)
  2. 向下转型:
    概念:让指向子类对象的父类引用,【恢复】成子类的引用
    格式:子类类型 引用名称 = (子类类型)父类类型的引用
    本质:【恢复】子类类型原本就有的访问范围

多态在内存中的理解

在这里插入图片描述

  1. 在访问成员变量时,由于Man类型是引用所属的类型,身份和权限与super类似,因此只能访问父类部分的数据
  2. 在调用方法时,进行动态绑定,判断对象究竟是哪个子类类型,找到这个子类类型的方法实现,加载进栈
    注:动态绑定只针对非静态的方法,所谓动态绑定:在程序运行阶段,才能知道具体是哪一个子类类型

多态的好处

  1. 提高了代码的可扩展性
  2. 在方法的参数列表中,可以定义父类类型的引用,将来调用的时候,所有的子类类型的对象,都可以作为方法的实际参数。
  3. 不在方法的参数列表中,就在普通的方法体中,使用父类的类型指向子类的对象,也能提高代码的可扩展性。对象的来源非常广泛,不仅仅是new出来的,(还可能是通过反射获取的,通过文件读取的,还可能是网络传递的,在写代码的编译阶段,无法知道对象具体的子类类型的)需要使用父类类型的引用,操作不知道的子类类型的对象。

instanceof关键字

  1. 作用:instanceof运算符的前一个操作符是一个对象,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的对象。如果是,则返回true,否则返回false
  2. 用法:A对象 instanceof B类型(接口)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值