多态的使用

news2024/11/15 22:24:00

1、认识多态

  • 面向对象三大特征:封装、继承、多态   

什么是多态?

  • 同类型的对象,表现出不同的形态。(对象的多种形态。)

多态的表现形式?

父类类型      对象名称            =           子类对象;

多态的前提?

  • 有  继承 / 实现  关系;
  • 有父类引用指向子类对象
  • 有方法重写

多态的好处?

  • 使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。
public class Person {
    private String name;
    private int age;
    
    public Person() {
    }
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println(name + "," + age);
    }
}
class Student extends Person {

    @Override
    public void show() {
        System.out.println("学生的信息位:" + getName() + ", " + getAge());
    }
}
class Teacher extends Person {

    @Override
    public void show() {
        System.out.println("老师的信息为:" + getName() + ", " + getAge());
    }
}
class Administrator extends Person {

    @Override
    public void show() {
        System.out.println("管理员的信息为:" + getName() + ", " + getAge());
    }
}

class Test {
    public static void main(String[] args) {
//      创建三个对象,并调用register方法
        Student s = new Student();
        s.setName("张三");
        s.setAge(18);

        Teacher t = new Teacher();
        t.setName("王建国");
        t.setAge(20);

        Administrator admin = new Administrator();
        admin.setName("管理员");
        admin.setAge(35);

        register(s);
        register(t);
        register(admin);
    }
//  这个方法既能接收老师,又能接收学生,还能接收管理员
//  只能把参数写成这三个类型的父类
    public static void register(Person p) {
        p.show();
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2022.2.3\lib\idea_rt.jar=33418:D:\BaiduNetdiskDownload\IntelliJ IDEA 2022.2.3\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\oop-polymorphism com.itheima.Test
学生的信息位:张三, 18
老师的信息为:王建国, 20
管理员的信息为:管理员, 35

Process finished with exit code 0

2、多态调用成员的特点 

  • 变量调用:编译看左边,运行也看左边。

    编译看左边:javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。

    运行看左边:java运行代码的时候,实际获取的就是左边父类中成员变量的值

  • 方法调用:编译看左边,运行看右边。

    编译看左边:javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。

    运行看右边:java运行代码的时候,实际上运行的是子类中的方法。

Animal   a  =  new   Dog();

现在用 a 去调用变量和方法的呀?是的

而a是Animal类型的,所以默认都会从Animal这个类中去找

//成员变量:在子类的对象中,会把父类的成员变量也继承下的的。父:name        子:name

//成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖的。

3、多态调用成员的内存图解 

首先第一步测试类的字节码文件先加载到方法区当中,然后虚拟机会自动的去调用main方法,然后会先加载父类的字节码文件,然后会再加载子类的字节码文件。

4、多态的优势和弊端

  • 在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
  • 定义方法的时候,使用 父类型 作为参数,可以接收所有子类对象,体现多态的扩展性与便利。

 

 

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

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

相关文章

SpringBoot项目-个人博客系统的实现

1.博客系统简要分析 一共有6个网页,分别是博客列表页面,博客详情页面,发布博客页面,博客登陆页面,博客更新页面,修改个人信息页面(暂未实现),我们要实现的功能有&#xf…

什么是 MySQL 的“回表”?怎么减少回表的次数?

什么是 MySQL 的“回表”?怎么减少回表的次数? 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,BTree 嘛! BTree 是什么?那你得先明白什么…

使用Python将图像转换为PDF:一次性解决您的批量转换需求

导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…

AI编程工具Copilot与Codeium的实测对比

csdn原创谢绝转载 简介 现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑…

Linux进程(二)

文章目录 进程(二)Linux的进程状态R (running)运行态S (sleeping)阻塞状态D (disk sleep)深度睡眠T(stopped)状态X(dead)状态Z&#x…

2024年浙师大MBA项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段,不少考生开始持续将注意力集中在备考的规划中!杭州达立易考教育整合浙江省内的MBA项目信息,为大家详细梳理了相关报考参考内容,方便大家更好完成择校以及针对性的备考工作。本期…

C语言基础知识点一

C语言基础知识点一&#xff1a; 1.数据类型 2.bool类型&#xff1a; 使用bool时时&#xff0c;需要增加<stdbool.h>头文件。 说明&#xff1a;bool 类型只有非零&#xff08;true&#xff09;和零&#xff08;false&#xff09;两种值。 如: if&#xff08;-1&#xf…

Qt下开发基于QGIS的应用程序

Qt下开发基于QGIS的应用程序 目的版本说明1、Qt的安装2、MSVC套件与Windows 10 SDK的下载3、QGIS开发有关的库文件下载4、环境搭建5、QGIS开发环境搭建6、展示网页地图 目的 由于有在背景地图上进行动态轨迹&#xff08;曲线&#xff09;显示的需要&#xff0c;故采用QtQGIS的…

CVS,SVN,Git,Mercurial 代码管理工具

现代软件开发过程中要实现高效的团队协作&#xff0c;需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前流行的代码管理工具&#xff0c;包括 CVS&#xff0c;SVN&#xff0c;Git&#xff0c;Mercurial 等 CVS 和 SVN 是集中管理&#xff0c;Git 具有非常…

Docker 容器化学习

文章目录 前言Docker架构 1、 docker安装2、启动docker服务3、设置docker随机器一起启动4、docker体验5、docker常规命令5.1、容器操作docker [run|start|stop|restart|kill|rm|pause|unpause]docker [ps|inspect|exec|logs|export|import] 5.2、镜像操作docker images|rmi|tag…

AOF日志:宕机了,Redis如何避免数据丢失

当服务器宕机后&#xff0c;数据全部丢失&#xff1a;我们很容易想到的一个解决方案是从后端数据库恢复这些数据&#xff0c;但这种方式存在两个问题&#xff1a;一是&#xff0c;需要频繁访问数据库&#xff0c;会给数据库带来巨大的压力&#xff1b;二是&#xff0c;这些数据…

整数规划——第三章 全单模矩阵

整数规划——第三章 全单模矩阵 若线性规划问题的约束矩阵为全单模矩阵&#xff0c;则该问题可行域的顶点都是整数点&#xff0c;从而线性规划与整数规划的最优解相同。 3.1 全单模性与最优性 考虑线性整数规划问题&#xff1a; (IP) min ⁡ c T x , s . t . A x ≤ b , x …

19、springboot引用配置属性或引用生成文件的属性或引用随机值

引用配置属性或引用生成文件的属性或引用随机值 ★ 使用占位符引用其他配置属性&#xff1a; 配置文件中可用${}占位符引用已有的属性&#xff0c;被引用的属性可以是&#xff1a; - 已定义的属性。 - 来自其他配置源&#xff08;比如命令行的选项参数、环境变量、系统属性等…

JGJ79-2012建筑地基处理技术规范

为了在地基处理的设计和施工中贯执行国家的技术经济政策&#xff0c;做到安全适用、技术先进、经济合理、确保质量、保护环境&#xff0c;制定本规范。 本规范适用于建筑工程地基处理的设计、施工和质量检验。 地基处理除应满足工程设计要求外&#xff0c;尚应做到因地制宜就…

【数模】奇异值分解SVD和图形处理

介绍奇异值分解在图形压缩中的运用&#xff0c;并将简单介绍下Matlab对于图形和视频的处理 一、奇异值分解介绍 1.1 基本概念 奇异值分解(Singular Value Decomposition&#xff0c;以下简称SVD)是线性代数中一种重要的矩阵分解&#xff1a; U和V都是正交矩阵∑是奇异值矩阵&…

操作系统_内存管理

这里写目录标题 虚拟内存是什么为什么要有虚拟内存虚拟内存的实现方式1.分页查找过程页表的底层实现 2.分段段表的底层实现 3.段页式 分段和分页有什么区别什么是交换空间物理地址、逻辑地址、有效地址、线性地址、虚拟地址页面替换算法什么是缓冲区溢出 有什么危害malloc 是如…

Arthas协助MQ消费性能优化

背景 项目中使用AWS的SQS消息队列进行异步处理&#xff0c;QA通过压测发现单机TPS在23左右&#xff0c;目标性能在500TPS&#xff0c;所以需要对消费逻辑进行优化&#xff0c;提升消费速度。 目标 消费TPS从23提升到500 优化流程 优化的思路是先分析定位性能瓶颈&#xff…

如何加载模型YOLOv8 ONNXRuntime

YOLOv8 是 YOLO(You Only Look Once)目标检测系统的最新版本(v8)。YOLO 是一种实时、一次性目标检测系统,旨在在网络的单次前向传递中执行目标检测,使其快速高效。YOLOv8是之前YOLO模型的改进版本,具有更高的精度和更快的推理速度。 ONNX(开放神经网络交换)是一种表示…

算法练习--leetcode 数组

文章目录 爬楼梯问题裴波那契数列两数之和 [数组]合并两个有序数组移动零找到所有数组中消失的数字三数之和 爬楼梯问题 输入n阶楼梯&#xff0c;每次爬1或者2个台阶&#xff0c;有多少种方法可以爬到楼顶&#xff1f; 示例1&#xff1a;输入2&#xff0c; 输出2 一次爬2阶&a…

正点原子HAL库入门1~GPIO

探索者F407ZGT6(V3) 理论基础 IO端口基本结构 F4/F7/H7系列的IO端口 F1在输出模式&#xff0c;禁止使用内部上下拉 F4/F7/H7在输出模式&#xff0c;可以使用内部上下拉不同系列IO翻转速度不同 F1系列的IO端口 施密特触发器&#xff1a;将非标准方波&#xff0c;整形为方波 当…