多态的概念及运用

多态

概念:多态是指同一种行为具有多个不同的表现形式或形态的能力。在Java中,多态是指一个对象的实际类型可以是其父类或接口类型,但在运行时会根据其实际类型来调用相应的方法。是面向对象的第三大特征,建立于封装和继承之上。

【多】:表示多种

【态】:表示状态

多态的实现方式

方法的重载体现多态

class B{
    public void say(){
        System.out.println("B(父类)类的say()方法被调用");
    }
}
class A extends B{
    public int sum(int n1,int n2){
        return n1 + n2;
    }
    public int sum(int n1,int n2,int n3){
        return n1 + n2 + n3;
    }
    public void say(){
        System.out.println("A(子类)的say()方法被调用");
    }
}
public class Test01{
    public static void main(String[] args){
        //方法重载体现多态
        A a = new A();
        //传入不同的参数就会调用不同的sum方法,体现多态
        System.out.println(a.sum(10,20));
        System.out.println(a.sum(10,20,30));
    }
}

方法的重写体现多态

class B{
    public void say(){
        System.out.println("B(父类)类的say()方法被调用");
    }
}
class A extends B{
    public int sum(int n1,int n2){
        return n1 + n2;
    }
    public int sum(int n1,int n2,int n3){
        return n1 + n2 + n3;
    }
    public void say(){
        System.out.println("A(子类)的say()方法被调用");
    }
}
public class Test01{
    public static void main(String[] args){
        //方法重写体现多态
        A a = new A();
        B b = new B();
        //对象不同,调用的方法不同
        a.say();
        b.say();
    }
}

对象的多态(核心)

class Animal{
    public void shout(){
        System.out.println("Animal大声叫");
    }
}

class Cat extends Animal{
    @Override
    public void shout(){
        System.out.println("小猫喵喵喵~~~");
    }
}

class Dog extends Animal{
    @Override
    public void shout(){
        System.out.println("小狗汪汪汪~~~");
    }
}

public class Test02{
    public static void main(String[] args){
        //对象多态
        Animal animal = new Dog();
        //运行时,animal的运行类型为Dog,因此调用的是Dog的shout方法
        animal.shout();//输出--小狗汪汪汪~~~
        animal = new Cat();
        animal.shout();//输出--小猫喵喵喵~~~  
    }
}

接口的多态

interface IUSB {
	public void use();
}

class Mouse implements IUSB{
	@Override
	public void use() {
		System.out.println("鼠标:点击");
	}
}

class KeyBoard implements IUSB{
	@Override
	public void use() {
		System.out.println("键盘:输入数据");
	}
}

class Disk implements IUSB{
	@Override
	public void use() {
		System.out.println("硬盘:文件上传下载");
	}
}

class Computer {
	public void connection(IUSB usb){
		usb.use();
	}
}

public class Test01 {
	public static void main(String[] args) {
		Computer computer = new Computer();
		//接口的多态:实现类的对象指向接口的引用
		//接口的引用中存储的是实现类对象在堆中的地址
		IUSB usb = new KeyBoard();
		computer.connection(usb);	
	}
}

注意:

  • 一个对象的编译类型和运行类型可以不一致
  • 编译类型在定义对象时就确定了,不能改变
  • 运行类型是可以变化的
  • 编译类型看=左边,运行类型看=右边

多态优缺点

优点:

  • 消除类型之间的耦合。
  • 可以使用基类类型的指针或引用指向任何子类类型的对象。
  • 可以使用基类的引用或指针调用重写的方法。
  • 可以方便地更改子类,添加新的子类。

缺点:

  • 不能使用基类的引用或指针直接访问子类的特有成员或方法。
  • 不能在编译时确定对象的类型,因此不能访问子类的特有方法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chrono下载管理器:提升下载体验,有效管理文件

名人说:莫愁千里路,自有到来风。 ——钱珝 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、介绍二、下载安装1、Chrome应用商店(需科学)2、第三方直链下载 三、使…

nacos下载安装和nacos启动报错

nacos简介: Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您…

Spring底层入门(九)

boot的执行流程分为构造SpringApplication对象、调用run方法两部分 1、Spring Boot 执行流程-构造 通常我们会在SpringBoot的主启动类中写以下的代码: 参数一是当前类的字节码,参数二是main的args参数。 public class StartApplication {public static…

(一)Linux的vim编辑器的使用

一.vim编辑器 Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 二…

关于勒索攻击,绝大多数企业存在的三个认知误区

网络空间,有一个挥之不去的“幽灵”,它的名字就叫勒索攻击。 近年来,企业遭受勒索攻击的事件被频频曝光。就在不久前,国家安全部曝光了一起境外黑客组织对我国某高新科技企业实施勒索攻击的案例,该企业的相关信息化系统…

Window7镜像注入USB驱动,解决系统安装后无法识别USB

Window7镜像注入usb驱动 Window7镜像注入usb驱动方法一方法二 Window7镜像注入usb驱动 一般4代酷睿之后的主机需要安装usb驱动才能驱动usb,导致很多Windows原版镜像安装后无法识别usb键盘 方法一 1.直接采购PS2 接口键盘、PS2 接口鼠标 方法二 使用联想镜像注入…

光峰科技2023年营收、净利润均双位数下滑,新一年延续?

近日,深圳光峰科技股份有限公司(688007.SH,下称“光峰科技”)对外公布了2023年和2024年一季度的经营“成绩单”。 透视财报不难看出,虽然光峰科技在降低成本、提振销售等层面下足了功夫,但受制于市场需求式…

测试项目实战——安享理财1(测试用例)

说明: 1.访问地址: 本项目实战使用的是传智播客的安享理财项目(找了半天这个项目能免费用且能够满足测试实战需求) 前台:http://121.43.169.97:8081/ 后台:http://121.43.169.97:8082/ (点赞收藏…

Git泄露(CTFHUB的git泄露)

log 当dirsearch 扫描一下,命令: python dirsearch.py -u url/.git 发现存在了git泄露 借助kali里面,打开GitHack所在的目录,然后 输入: python2 GitHack.py -u url/.git/ 必须要用Python2 tree 命令 可以看到…

Paddle 基于ANN(全连接神经网络)的GAN(生成对抗网络)实现

什么是GAN GAN是生成对抗网络,将会根据一个随机向量,实现数据的生成(如生成手写数字、生成文本等)。 GAN的训练过程中,需要有一个生成器G和一个鉴别器D. 生成器用于生成数据,鉴定器用于鉴定数据的准确性&…

车载测试___面试题和答案归纳

车载面试题 一、实车还在设计开发阶段,大部分测试通过什么测试? 答案:通过台架和仿真来完成的 二、测试部分划分? 测试部门是分为自研,系统,验收,自研部门是开发阶段测试,系统部门…

95、动态规划-编辑距离

递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作,然后根据这些操作递归处理子问题。 递归函数定义:定义一个递归函数 minDistance(i, j),表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…

llama.cpp制作GGUF文件及使用

llama.cpp的介绍 llama.cpp是一个开源项目,由Georgi Gerganov开发,旨在提供一个高性能的推理工具,专为在各种硬件平台上运行大型语言模型(LLMs)而设计。这个项目的重点在于优化推理过程中的性能问题,特别是…

(七)JSP教程——session对象

浏览器和Web服务器之间的交互通过HTTP协议来完成,HTTP协议是一种无状态的协议,服务器端无法保留浏览器每次与服务器的连接信息,无法判断每次连接的是否为同一客户端。为了让服务器端记住客户端的连接信息,可以使用session对象来记…

Java毕设之基于springboot的医护人员排班系统

运行环境 开发语言:java 框架:springboot,vue JDK版本:JDK1.8 数据库:mysql5.7(推荐5.7,8.0也可以) 数据库工具:Navicat11 开发软件:idea/eclipse(推荐idea) 系统详细实现 医护类型管理 医护人员排班系统的系统管理员可以对医护类型添加修改删除以及…

Error: error:0308010C:digital envelope routines::unsupported 问题如何解决

Error: error:0308010C:digital envelope routines::unsupported 通常与 Node.js 的加密库中对某些加密算法的支持有关。这个错误可能是因为 Node.js 的版本与某些依赖库不兼容导致的。特别是在 Node.js 17 版本中,默认使用 OpenSSL 3,而一些旧的加密方式…

电商核心技术揭秘53:社群营销的策略与实施

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘相关系列文章合集(3) 电商技术揭秘四十一:电商平台的营销系统浅析 电商技术揭秘四十二&#…

Python轻量级Web框架Flask(13)—— Flask个人博客项目

0、前言: ★这部分内容是基于之前Flask学习内容的一个实战项目梳理内容,没有可以直接抄下来跑的代码,是学习了之前Flask基础知识之后,再来看这部分内容,就会对Flask项目开发流程有更清楚的认知,对一些开发细节可以进一步的学习。项目功能,通过Flask制作个人博客。项目架…

YOLOv9中模块总结补充|RepNCSPELAN4详图

专栏地址:目前售价售价69.9,改进点70 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 1. RepNCSPELAN4详图 RepNCSPELAN4是YOLOv9中的特征提取-融合模块,类似前几…

制造业的智慧进化:机器学习与人工智能的全方位渗透

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…
最新文章