Java入门14——动态绑定(含多态)

news2024/11/28 2:41:32

大家好,我们今天来学动态绑定和多态,话不多说,开始正题~


但是要学动态绑定之前,我们要学习一下向上转型,方便后续更好地理解~

一、向上转型

1.什么是向上转型

网上概念有很多,但其实通俗来讲,向上转型就是把一个子类转换成父类

2.代码演示+讲解

这次我们依然以动物为例做演示~首先我们写一个父类Animal0,代码如下:

public class Animal0 {
    public String name;
    public int age;
    public Animal0(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

这个父类里面,有名字和年龄,我们再来写一个子类 fish :

public class fish extends Animal0{
    public fish(String name, int age) {
        super(name, age);
    }
}

子类也有了,那我们接下来就再创建一个测试类test吧~

在test类里面有非常关键的一步,就是向上转型!先给大家看一下代码:

public class test {
    public static void main(String[] args) {
        Animal0 animal0 = new fish("sfish",2);
        System.out.println(animal0.name);
        System.out.println(animal0.age);
    }
}

 这个被红色框框框起来的就可以称作向上转型,我们发现Animal0的类可以new它的子类fish,之后我们再次调用就可以直接 父类.成员变量名,就可以引用了

我们来看一下运行结果:

有了向上转型的基础,接下来,我们就可以学动态绑定了~

二、动态绑定

如果我们现在有父类Animal0,子类fish和子类monkey,我们知道,不管是哪种动物,它们都会吃,所以我们在父类写一个吃的方法~

代码如下:

public class Animal0 {
    public String name;
    public int age;
    public Animal0(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void eat() {
        System.out.println("eat");
    }
}

但是我们知道,鱼吃鱼食,猴子吃猴子的食物,吃的不一样,所以我们要在子类里面重写父类的方法~

那么fish类的代码和monkey类的代码如下:

public class fish extends Animal0{
    public fish(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("fish eat");
    }
}
public class monkey extends Animal0{
    public monkey(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("monkey eat");
    }
}

那么我们如何调用这个具体的方法呢?这个时候我们来写一下test类~

public class test {
    public static void main(String[] args) {
        Animal0 animal0 = new fish("sfish",2);
        System.out.println(animal0.name);
        System.out.println(animal0.age);
        animal0.eat();

        Animal0 animal1 = new monkey("smonkey",3);
        System.out.println(animal1.name);
        System.out.println(animal1.age);
        animal1.eat();
    }
}

这个时候,父类引用了子类的对象,我们就可以实现 eat 的具体方法啦~

运行结果如下:

 这就是我们的动态绑定~

三、多态

如果一个功能可以调用多种状态就很方便,所以我们来看看多态

这里除了test类不同之外,其它是一样的,我们来看看test类的代码~

public class test {
    public static void eatfunc(Animal0 animal0){
        animal0.eat();
    }

    public static void main(String[] args) {
        fish sfish = new fish("sfish",2);
        monkey smonkey = new monkey("smonkey",3);
        eatfunc(sfish);
        eatfunc(smonkey);
    }
}

这里我们定义了一个eatfunc的方法,传一个Animal0类的参数,然后在调用的时候我们调用了fish类和monkey类的对象,这就是我们的多态


这就是我们今天的内容,大家加油鸭! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2235439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Request 和 Response 万字详解

文章目录 1.Request和Response的概述2.Request对象2.1 Request 继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式 2.3 解决post请求乱码问题 掌握内容讲解内容小结 2.4 Request请求转发 3.HTTP响应详…

Qt QCustomplot 在采集信号领域的应用

文章目录 一、常用的几种开源库:1、QCustomPlot:2、QChart:3、Qwt:QCustomplot 在采集信号领域的应用1、应用实例时域分析频谱分析2.数据筛选和处理其他参考自然界中的物理过程、传感器和传感器网络、电路和电子设备、通信系统等都是模拟信号的来源。通过可视化模拟信号,可以…

【初阶数据结构与算法】沉浸式刷题之顺序表练习(顺序表以及双指针两种方法)

文章目录 顺序表练习1.移除数组中指定的元素方法1(顺序表)方法2(双指针) 2.删除有序数组中的重复项方法1(顺序表)方法2(双指针) 3.双指针练习之合并两个有序数组方法1(直…

机器学习—矩阵乘法

矩阵只是一个或两个数组。 如何在向量之间取点积? 让我们用列向量[1,2]*[[3,4],如果z是这两个向量之间的点积,然后通过乘以第一个元素来计算z,通过这里的第一个元素,所以是1*3加第二个元素乘以第二个元素即2*4&#…

使用 ADB 在某个特定时间点点击 Android 设备上的某个按钮

前提条件 安装 ADB:确保你已经在计算机上安装了 Android SDK(或单独的 ADB)。并将其添加到系统环境变量中,以便你可以在命令行中运行 adb。 USB调试:确保 Android 设备已启用 USB 调试模式。这可以在设备的“设置” -…

数据结构之二叉树前序,中序,后序习题分析(递归图)

1.比较相同的树 二叉树不能轻易用断言,因为树一定有空 2.找结点值 3.单值二叉树 4.对称二叉树 5.前序遍历

[CUDA] 将已有的地址空间设置为pinned memory

文章目录 1. cudaHostRegitster的使用构建pinned memory1.1 基本使用1.2 cudaHostRegister 需要设置cudaSetDevice? Reference 1. cudaHostRegitster的使用构建pinned memory 注意使用C申请的内存空间,在进行copy是无法实现流的最大异步性;因此使用cud…

各种数据库介绍

1. 关系型数据库(RDBMS) MySQL • 特点:开源、免费,社区版功能强大且稳定。支持大量的并发连接,常用于Web应用。 • 适用场景:中小型网站、博客、电商等。 PostgreSQL • 特点:功能丰富&#xf…

ONLYOFFICE 8.2版本评测:超好用办公工具

前言 在技术的快速发展和工作方式的持续演进下,现代办公软件正变得越来越强大和多样化。ONLYOFFICE,作为市场上备受瞩目的一体化办公解决方案,以其全面的文档编辑、表格处理和演示制作功能,满足了用户在不同办公场景下的需求。最…

Python基础学习_01

目录 1、注释 2、数字和数学计算 3、变量 4、字符串 5、打印 6、本节总结 1、注释 • 什么是注释? 1)注释就是用自然语言向代码阅读者说明代码的功能和意义 • 注释 1)单行注释使用 # 为开头;并且不能换行…

不容错过的电脑监控软件TOP10|电脑屏幕监控软件推荐(收藏)

随着企业对员工管理和数据安全的要求日益提高,电脑监控软件已经成为许多公司确保工作效率、信息保密以及员工行为合规性的重要工具。无论是需要跟踪员工的工作进度,还是防止数据泄露和滥用,选择合适的监控软件至关重要。今天我们为你整理了十…

Python练习10

Python日常练习 题目: 编写程序,输出如下所示图案。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 要求: 使用for循环的方式完成 --------------------------------------------------------- 注意: …

【DM系列】DM 集成 JDBC 开发指南

前言 数据库访问是数据库应用系统中非常重要的组成部分,DM 作为一个通用数据库管理系统,提供了多种数据库访问接口,包括 ODBC、JDBC、DPI 等方式。本开发指南详细介绍了 DM 的各种访问接口、相应开发环境的配置、以及一些开发用例。本指南的主…

长亭那个检测能力超强的 WAF,出免费版啦

告诉你们一个震撼人心的消息,那个检测能力超强的 WAF——长亭雷池,他推出免费社区版啦,体验地址见文末。 八年前我刚从学校毕业,在腾讯做安全研究,看到宇森在 BlackHat 上演讲的议题 《永别了,SQL 注入》 …

Excel 无法打开文件

Excel 无法打开文件 ‘新建 Microsoft Excel 工作表.xlsx",因为 文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。

软件测试学习笔记丨SeleniumPO模式

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22525 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…

Nginx配置SSL证书(自签名证书)

1 生成自签名证书(生成证书方式一) # 生成私钥:server.key [rootlocalhost ~]# openssl genrsa -out server.key 2048# 生成证书请求文件:server.csr [rootlocalhost cert]# openssl req -new -key server.key -out server.csr Country Name (2 letter code) [XX]:cn 《这里…

汽车固态电池深度报告

固态电池符合未来大容量二次电池发展方向,半固态电池已装车,高端长续航车型、e-VTOL 等方向对固态电池需求明确。固态电池理论上具备更高的能量密度、更好的热稳定性、更长的循环寿命等优点,是未来大容量二次电池发展方向。根据中国汽车动力…

Linux网络命令:用于查看和修改路由表的重要工具ip route 详解

目录 一、概述 二、用法 1、基本语法 2、参数说明 3、常用选项 4、获取帮助 三、基本用法示例 1、 查看路由表 2、 添加路由 3、 删除路由 4、 修改路由 5、 添加默认路由 6、 删除默认路由 四、路由表管理 1、查看所有路由表 2、指定路由表 五、其他选项 1、…

02- 模块化编程-007 Ltc1684( ADC16-Bit)采样显示

1、Ltc1684芯片介绍 该芯片是一款高精度的16位模数转换器(ADC),适合于高精度仪器的开发,它能提供精准的模拟信号到数字信号的转换。 特性 采用 MSOP 封装的 16 位、250ksps ADC 单 5V 电源 低电源电流:850μA (典型值) 自动停机功能可把电源…