java 多态_Java面向对象 —— 多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~

1c717b47325bfc3556dc70110ad54458.png

首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形态,也可以理解为事物存在的多种体现形态(父类的引用类型变量指向了子类对象,或者是接口的引用类型变量指向了接口实现类的对象) 多态的前提:必须存在继承或者实现关系。 多态要注意的细节:

  1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
  2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
  3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
  4. 多态情况下,不能访问子类特有的成员。 小结:多态情况下,子父类存在同名的成员时,访问的都是父类成员,除了在同名非静态函数时才是访问子类的。

下面开始正式的内容

一、概念:

多态体现为父类引用变量可以指向子类对象。

多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

二、定义:

父类类型 变量名 = new 子类类型(); 
变量名.方法名();

三、多态的成员特点:

成员变量:编译运行都看左边(父类);

成员方法:编译看左,运行看右(子类)。

四、instanceof 关键字

用instanceof关键字来判断某个对象是否属于某种数据类型(若是根本没关系的话,直接编译失败;编译成功可能为父元素的另外一个子元素)

五、多态-转型:

1、向上转型:

当有子类对象赋值给一个父类引用时,便是向上转型。-------多态本身就是向上转型的过程

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

2、向下转型:

一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。

在多态的基础上才可以的,也就是得先向上再向下的!

向下转型后调用对象和方法时,都是调用的子类的方法;也可以调用子类独有的普通方法。

子类类型 变量名 = (子类类型) 父类类型的变量;

六、多态的优劣:

1、什么时候用向上转型:

当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。

2、什么时候用向下转型:

当要使用子类特有功能时,就需要使用向下转型。

向下转型的好处:可以使用子类特有功能。

弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必须做类型判断。(有可能转到另外的一个子元素上,这时候就需要instanceof 判定下是不是所需要的数据类型)

Person p1 = new Student(); // 前提条件,学生类已经继承了人类
boolean flag = p1 instanceof Student; //flag结果为true
boolean flag2 = p1 instanceof Teacher; //flag结果为false

看过的朋友们,如果觉得对你有帮助,记得动动小手点个赞~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值