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

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

  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

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

java 多态_Java面向对象 —— 多态相关推荐

  1. java面向对象的多态_java面向对象(五)之多态

    多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. ...

  2. day8 Java学习(面向对象.多态接口)

    面向对象    多态: 概述:事物存在的多种形态.  多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问:           编译看左边(父类),运行左边(父类) ...

  3. java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  4. java 对象的态_Java面向对象-------多态总结

    1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...

  5. java中多态_java之多态

    1.多态的概述:是面向对象的三大特性之一,封装.继承.多态. ①一个具体的对象有多种形态,老虎既属于猫科动物(因为子父类是相对的,所以猫科动物也可以看做子类),又属于哺乳动物,所以老虎既可以拥有猫科动 ...

  6. java 多态_Java的多态

    Java的多态有两种,一种是方法的重写,一种是通过继承方法的覆盖 方法的重写,是相同的方法名,不同参数列表,实现不同的功能.例如: Car.java public class Car { public ...

  7. java中多态_Java中多态的理解

    一开始对多态也是半知半解的,最近又要用到多态,所以又温习了一下 多态是继承中的一种特别的 for example class FatherClass { function1(){a1} functio ...

  8. 【java初学】面向对象多态

    文章目录 面向对象3.0 1. JavaBeans规范类对象调用 2. 多类合作[重点] 2.1 汽修厂和汽车 2.2 汽车类代码实现 2.3 修理厂代码实现 2.4 main方法 2.5 笔记本电脑 ...

  9. 红牛农场java代码_Java面向对象程序设计实验指导模板代码(171页)-原创力文档...

    PAGE 1 PAGE 24 Java面向对象程序设计实验指导代码 内容简介 本书是<Java面向对象程序设计>的配套实验指导和习题解答.本书的第一部分为16次上机实践的内容,每次上机实践 ...

最新文章

  1. vmware 添加 磁盘 空间
  2. italic与oblique的区别
  3. Js 变量声明提升和函数声明提升
  4. 数论杂谈(欧拉定理与费马小定理结论与应用)
  5. 华三ospf联动bfd_HCIE2020__路由交换专家__BFD综合实验
  6. 文石服务器维护,文石BOOX OS 2.0新系统即将上线,联合京东读书推出BOOX书城
  7. Linux(4) 实用指令
  8. linux下如何查看某个容器的详细信息?
  9. 视频分析服务器作用,如何选择合适的视频分析解决方案?
  10. 从零学Java(31)之构造方法
  11. glusterfs创建分布式卷
  12. html提取excel指定单元格数据,怎样从很多的表格中提取指定单元格数据
  13. 【PYTHON】tkinter如何设置界面消失 当制作一个登陆界面时,登陆成功之后,如何让登陆界面本身消失...
  14. java中的throw_java 中Throw能抛出的是什么?
  15. python读取txt文件写入失败-Python write 函数写文件失败
  16. Springboot mysql访问异常:User does not have access to metadata required to determine stored procedure
  17. 关于PN532 读取二代证UUID____记录自己亲自实验成功!!!
  18. 前端_前端招聘面试题(1)
  19. linux 发送邮件 554,linux – Sendmail:“TLS verify = FAIL”,“554 5.1.8:发件人地址被拒绝:未找到MX记录”...
  20. 网络游戏公司招聘C++程序员的笔试题(有我的答案)

热门文章

  1. [转]该学Java或.NET?
  2. SpringBoot笔记整理(二)
  3. 第一章 计算机网络 3 标准化工作和相关组织 [计算机网络笔记] -简单浏览了解即可
  4. linux java输出到文件,linux java输出到文件内容
  5. hbase集群 数据写入_Hbase实用技巧:全量+增量数据的迁移方法
  6. 怎么知道wx.config执行成功没_作为一个减肥40斤,且10年没反弹的普通人,这份瘦身经验分享给你...
  7. MATLAB GUI如何制作下拉列表
  8. ARM 寄存器 详解
  9. 安卓逆向_15( 三 ) --- Android NDK 开发【 jni 静态注册、JNI_OnLoad 动态注册】
  10. Linux 源码安装 Python3 和 pip3