1、多态(动态绑定)

动态绑定是指在运⾏期间,判断所引⽤对象的实际类型,根据其实际的类型调⽤相应的⽅法,多态即:⼀个对象具有多种状态的⾏为。

1.1、多态的3个必要条件

要有继承
要有重写
父类的引用指向子类的对象

1.2、方法重写的案例回顾

动物类

public class Animal {public void speek(){System.out.println("动物都会叫");}}

狗类,继承自动物类

class Dog extends Animal {  /*** 重写父类的speek方法*/@Overridepublic void speek() {System.out.println("我是狗,旺旺旺...");}}

猫类,继承自动物类

class Cat extends Animal {/*** 重写父类的speek方法*/@Overridepublic void speek() {System.out.println("我是猫,喵喵喵...");}}

1.3、完善案例实现多态性

public class Test {public static void main(String[] args) {Dog d = new Dog();Cat c = new Cat();Animal ani = null; ani = d; //动物变成了狗ani.speek(); //我是狗,旺旺旺...ani = c; //动物变成了猫ani.speek(); //我是猫,喵喵喵...}
}

2、对象转型

2.1、向上转型

父类的引用指向子类的对象,称为向上转型


2.1.1、回顾多态的案例

public class Test {public static void main(String[] args) {Dog d = new Dog();Cat c = new Cat();Animal ani = null;    ani = d; //动物变成了狗ani.speek(); //我是狗,旺旺旺...    ani = c; //动物变成了猫ani.speek(); //我是猫,喵喵喵...}
}

代码中将父类的引用指向了子类的对象,该写法是对象的向上转型;向上转型是自动的。


2.2、向下转型

2.2.1、回顾多态的案例,并修改main方法

public class Test2 {public static void main(String[] args) {Dog jinMao = new Dog();Animal ani = jinMao;     Dog erHa = (Dog) ani; //向下转型}
}

代码中将子类的引用指向了父类的对象,该写法是对象的向下转型;向下转型不是自动的,需要强制类型转换符进行转换。

向上转型和向下转型

转型条件:只有存在继承关系才可以转型

如何避免ClassCastException

  使用instanceof运算符判断引用指向对象的类型后再向下转型

instanceof运算符特点

  1. instanceof用于检测引用指向的对象数据类型
  2. instanceof运算结果是true/false
  3. instanceof语法格式:引用 instanceof 数据类型

具体代码如下


public class Test {public static void main(String[] args){Animal animal = new Cat();if(animal instanceof Dog) {Dog dog = (Dog)animal;dog.eat();} if (animal instanceof Cat) {Cat cat = (Cat)animal;cat.eat();}}
}class Animal {public void eat() {System.out.print("动物能进食");}
}
class Dog extends Animal{public void eat() {System.out.print("狗吃狗粮");}
}
class Cat extends Animal {System.out.print("狗吃狗粮");
}

2022/07/25 吉软 Java基础(10)面向对象——多态相关推荐

  1. Java基础10(反射)

    Java基础10(反射) 1 什么是反射 官方解释:反射(reflection)技术通常被用来检测和改变应用程序在 Java 虚拟机中的行为表现.它是一个相对而言比较高级的技术,反射是一种强有力的技术 ...

  2. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  3. 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  4. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  5. Java基础篇--面向对象(Object Oriented)

    Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...

  6. 【Java基础】面向对象(三)

    [Java基础]面向对象(三) 一.多态 概念 引用类型转换 二.Object类 概述 常用方法 三.抽象类 抽象类与抽象方法的定义 注意事项 四.接口 概述 接口定义 含有抽象方法 含有默认方法和静 ...

  7. JAVA基础学习--面向对象

    JAVA基础学习–面向对象 1.面向对象与面向过程: 面向过程:就代表从头到位,每一步都需要我们来完成,例如洗衣服,首先收拾脏衣服.接上水.到洗衣液.搓.倒水.拧干.晾晒.每一步都需要我们来完成. 面 ...

  8. (2022最新面试题)JAVA基础面试题

    整理了一些比较基础的面试题,一方面是为了自己以后时常复习,同时也是为了一些准备面试的开发小伙伴所准备的,如一些方面不完全不吝赐教,希望大家都能找到满意工作. 目录 一.JAVA基础 1.JRE和JDK ...

  9. JAVA基础:面向对象的例外处理

    为初学者而著! Java基础是初学者的起点,是帮助你从小白入门到精通必学基础课程! B站最新录制Java300集>>>   适合准备入行开发的零基础员学习Java,基于最新JDK13 ...

最新文章

  1. android开发过程中项目中遇到的坑----布点问题
  2. 006商城项目:该项目的路径访问问题
  3. 与金山云的樊博士聊了聊AV1算法优化以及如何提升沉浸式视频的沉浸感
  4. Kohana和Zencart
  5. 数据库期末复习知识点:(仅供参考)
  6. python `__bool__`
  7. 数据库路由中间件MyCat - 使用篇(1)
  8. 简库软件库工具箱综合源码_iApp源码
  9. 2021年危险化学品经营单位安全管理人员考试及危险化学品经营单位安全管理人员作业考试题库
  10. 各省GTFP绿色全要素生产率面板数据(2004-2018年)
  11. i5 9600k和i5 9400的差距?哪个好?对比才知道
  12. Html中style标签是做什么的
  13. [周更]5.unity3D 三体运动(简易版)
  14. element导航菜单添加搜索功能
  15. 腾讯消消乐 状压dp加普通dp
  16. 小米5S刷机认真看一眼就能会的简单详细教图文
  17. uni-app 动画
  18. 支持微信多开、防止消息撤回的小助手
  19. 汽车防抱死系统_ABS_建模与模糊PID控制研究
  20. Jdk1.8 Collectors类使用详解(实用干货)

热门文章

  1. 移动物联网卡管理系统有哪几张类型
  2. Java实现微信、QQ等群主发红包实例(普通红包)
  3. 综合评价与决策方法04——灰色关联分析法
  4. 国密SM3的C语言代码C51移植到8051
  5. excel小技巧之多行同样的的数据怎么填充
  6. b站2022年拜年祭单品动画成本分析思考
  7. 第39讲:MySQL常规的索引分类
  8. FrSky D16 protocol (X series TX/RX compatible)
  9. threejs 创建场景,轨道控制器以及天空盒子
  10. 【反客为主】360三面竟然被问到怎么日卫星?我:想学阿,我教你阿!