我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java面向对象——多态的详细介绍

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java面向对象——多态的详细介绍

一、概述

多态是继封装、继承之后,面向对象的第三大特性。

生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。

多态:

是指同一行为,具有多个不同表现形式。

前提【重点】

继承或者实现【二选一】

方法的重写【意义体现:不重写,无意义】

父类引用指向子类对象【格式体现】

免费在线学习视频推荐:java视频

二、多态的体现

多态体现的格式:

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

父类类型:指子类对象继承的父类类型,或者实现的父接口类型。

代码如下:

Fu f = new Zi(); 
f.method();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。

代码如下:

定义父类:

b24a70bef0c401f256c78562bcc613e.png

定义子类:

4f964317ec8470d91067f4451efcdbd.png

定义测试类:

f71e1044f6bcf596be788bac576a41e.png

三、多态的好处

实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展性与便利。

代码如下:

定义父类:

8fdbd6529e72ab9dbe46f2ccf0a46d7.png

定义子类:

a8b35750b9eda7be486185f8cf02389.png

定义测试类:

public class Test {
    public static void main(String[] args) {
        // 多态形式,创建对象
        // Cat c = new Cat();
        // Dog d = new Dog();

        // 调用showCatEat showCatEat(c);
        // 调用showDogEat
        showDogEat(d);

        
        showAnimalEat(c);
        showAnimalEat(d);
    }

    public static void showCatEat(Cat c) {
        c.eat();
    }

    public static void showDogEat(Dog d) {
        d.eat();
    }

    public static void showAnimalEat(Animal a) {
        a.eat();
    }
}

当eat方法执行时,多态规定执行的是子类重写的方法,那么效果自然与showCatEat、showDogEat方法一致, 所以showAnimalEat完全可以替代以上两方法。

不仅仅是替代,在扩展性方面,无论之后再多的子类出现,我们都不需要编写showXxxEat方法了,直接使用showAnimalEat都可以完成。

所以,多态的好处体现在可以使程序编写的更简单,并有良好的扩展。

四、引用类型转换

多态的转型分为向上转型与向下转型两种:

向上转型

向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。

当父类引用指向一个子类对象时,便是向上转型。

使用格式:

父类类型 变量名 = new 子类类型(); 
如:Animal a = new Cat();

向下转型

父类类型向子类类型向下转换的过程,这个过程是强制的。

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

使用格式:

子类类型 变量名 = (子类类型) 父类变量名; 
如 :Cat c =(Cat) a;

转型演示,代码如下:

定义类:

aa218c28ddb591416939b6e49ba9da4.png

定义测试类:

475a7f496150720fa67db0036be9a03.png

转型的异常

转型的过程中,一不小心就会遇到这样的问题,请看如下代码:

f5de02b9020394d9142b00341e52c57.png

这段代码可以通过编译,但是运行时,却报出了ClassCastException,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。

为了避免ClassCastException的发生,Java提供了 关键字,给引用变量做类型的校验。

格式如下:

变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。

所以,转换前,我们最好先做一个判断,代码如下:

18e55e0d5aa2de1dd8fe4be6e1a5214.png

想学习更多相关教程请访问:java入门学习

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java面向对象——多态的详细介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java面向对象——多态的详细介绍

一、概述多态是继封装、继承之后,面向对象的第三大特性。生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。多态:是
java面向对象——多态的详细介绍
2020-05-09

java——面向对象详细介绍(一)

1、什么叫面向对象?面向对象(Object-Oriented,简称OO)就是一种常见的程序结构设计方法。面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后使用新创建的复合数据类型作为项目的基础。面向对象是一个很抽象的概念,它相对面
java——面向对象详细介绍(一)
2020-10-09

java——面向对象详细介绍(三)

本文接上文:java——面向对象详细介绍(二)11、接口(interface)引入:抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”→ 接口;例子:生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所
2022-03-09

java———面向对象详细介绍(二)

本文接上篇文章:java——面向对象详细介绍(一)11、子类访问父类和方法覆写子类不能直接访问父类的私有成员;但是子类可以调用父类中的非私有方法来间接访问父类的私有成员。Person类中有私有字段name,Student继承Personnew Sudent()
java———面向对象详细介绍(二)
2015-10-13

java面向对象特性介绍

Java面向对象的三大特性:封装、继承、多态。一、封装将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作与访问。封装的实现步骤:修改属性的可见性:设为private创建getter/setter方法:用于属性的读写在g
java面向对象特性介绍
2018-11-22

java面向对象之多态

多态的简单理解:student类继承了Person类,则student类的对象既是student又是person类多态性具有两种展现的形式:1.方法的多态性:(1)方法的重载:同一个方法可以根据传入的参数的类型或者个数的不同实现不同的功能(2)方法的覆写:同一
java面向对象之多态
2019-03-28

Java对象与Java类的详细介绍

本篇内容介绍了“Java对象与Java类的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录1.面向对象是什么?2.Java类1.什
2023-06-20

java中关于对象的详细介绍

一、对象的创建步骤:(1)声名对象变量:对象变量的声明并没有创建对象,系统只是为该改变量分配一个引用空间。(2)对象的实例化:为对象分配空间,执行new运算符后的构造方法完成对象的初始化,并返回该对象的引用。过程:1、首先为对象分配内存空间,并将成员变量进行初
java中关于对象的详细介绍
2014-08-23

详解Java面向对象中的继承与多态

详解Java面向对象中的继承与多态?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java 继承与多态的深入理解1、 什么是继承,继承的特点?子类继承父类的特征和行为,使得
2023-05-31

Java对象的内存布局详细介绍

这篇文章主要介绍了Java对象的内存布局,我们知道在Java中基本数据类型的大小,例如int类型占4个字节、long类型占8个字节,那么Integer对象和Long对象会占用多少内存呢?本文介绍一下Java对象在堆中的内存结构以及对象大小的计算
2023-02-13

Java 面向对象 之 多态实例2

转载于 : http://www.verejava.com/?id=16992846385655 /**题目: 孩子吃 水果(苹果,葡萄,芒果,菠萝)思路:1. 抽象出类 : 孩子(Baby), 水果(Fruit)(苹果(Apple),葡萄
2023-06-02

关于java中类和对象的详细介绍

类和对象对象我们知道,代表现实世界中可以明确标识的一个实体(万物皆对象),每个对象都有自己独特的标识、状态和行为。类是具有相似特征和行为的事物的统称。使用一个通用类来定义同一类型的对象。 类是一个模板 、蓝本或者说是合约 , 用来定义对象的数据域是什么以及方法
关于java中类和对象的详细介绍
2015-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录