JAVA多态(超详细讲解)

2023-11-01

目录

多态的基本介绍:

实现多态的条件:

1.继承:必须要有子类继承父类的继承关系。

2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。

3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。


JAVA面向对象编程有三大特性:封装、继承、多态。

在我们学习了继承后,我们将继续学习多态。

多态的基本介绍:

这里引用下其他地方的解释。  所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

通俗点讲,多态就是不同对象对同一物体或事件发出不同的反应或响应。比如stuendt是一个父类,那么在操场上上体育课的学生和在教室里面的学生就是它的子类。这时上课铃声响了,上体育课的学生去操场,在教室里面上课的学生则是回教室,不同的学生有着不同的反应,这就是多态。

实现多态的条件:

1.继承:必须要有子类继承父类的继承关系。

2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。

3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

什么叫做向上转型?

        A   b  = new A();这行代码大家因该都很清楚,我们实例化了一个A的对象。但是当我们这样来定义的时候呢?

例如: A   b =new  a();   (a是A的子类)

这里我们定义了一个A类型的b,但是它是由a来对象实例。

那么向上转型的作用是什么呢?

在上面我们说了子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。向上转型后,子类单独定义的方法会丢失(即子类重载了父类中的方法),而子类中重写了父类的方法,当我们调用他们时,会调用重写的方法。理解起来麻烦的话,直接来看代码吧。

class win{
	String name;
	win(){
		name="win";
	}
	win(String name){
		this.name=name;
	}
	public void tostring() {
		System.out.println(  "this is win" );
		Tostring();
	}
	public void Tostring() {
		System.out.println( "This is win" );
	}
	public void setName(String name) {
		this.name=name;
	}
	public String getName() {
		return name;
	}
}
class win1 extends win{
	win1(){}
	win1(String name){
		this.name=name; 
	}
	public void tostring(String name) {       //重载
		System.out.println( "this is win1");
		Tostring();
	}
	public void Tostring() {                 //重写
		System.out.println( "This is win1");
	}
}
public class Main{
	public static void main(String[] args)
	{
		win a =new win1("win1");
		a.tostring();
	}
}

 

 

分析:子类win1重载了tostring()方法,重写了Tostring()方法,当我们调用a.tostring()方法时,因为向上转型的原则,先会调用父类中的tostring()方法(子类中的tostring()重载后丢失),在调用子类中的Tostring()方法。

再来看一个代码,我们同时将子类中的两个方法都重载看下

public void tostring(String name) {       //重载
		System.out.println( "this is win1");
		Tostring();
	}
	public void Tostring(String name) {                 //重载
		System.out.println( "This is win1");
	}

  可以看到这里我们都调用的是父类中的方法,因为子类中的方法都被重载了。

 

看到这里,大家应该能理解下面代码的意思了吧

public void tostring() {       //重写
		System.out.println( "this is win1");
		Tostring();
	}
	public void Tostring(String name) {                 //重载
		System.out.println( "This is win1");
	}

public void tostring() {       //重写
		System.out.println( "this is win1");
		Tostring();
	}
	public void Tostring() {                 //重写
		System.out.println( "This is win1");
	}

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA多态(超详细讲解) 的相关文章

  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • onclick 监听器(this)是什么意思?

    btn Login setOnClickListener this 在安卓工作室 我在无数地方见过这种情况 这是什么意思 我知道该怎样this运行 但是监听者叫什么 这个例子来自 Link https stackoverflow com q

随机推荐

  • 你还不会Python网络爬虫中的requests模块使用《一》

    替代模块 比如说urllib模块 但是在工作中用的最多的还是requests模块 requests的代码简洁易懂 相对于臃肿的urllib模块 使用requests编写的爬虫代码将会更少 而且实现某一功能将会简单 因此建议大家掌握该模块的使
  • ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?

    这是一条目录 目录 这是一条目录 01 什么是GLT文件 02 案例 1 打开ENVI软件 1 1 软件界面显示效果如下 2 加载需要基于GLT进行几何校正的风云三号卫星影像数据 3 寻找 建立GLT文件 的工具所在位置 4 建立GLT文件
  • PL2303驱动安装需要联网

    问题描述 提示 这里描述具体问题 在使用PL2303驱动时 需要连接网络 例如 USB RS232插入电脑后会在windows10系统设备管理中的其他设备中显示USE Ser 这个表示没有安装驱动 我安装了PL2303驱动后也没办法使用 后
  • 蓝桥杯--砝码称重(dp)

    砝码称重 题目评测 你有一架天平和 N 个砝码 这 N 个砝码重量依次是 W1 W2 WN 请你计算一共可以称出多少种不同的正整数重量 注意砝码可以放在天平两边 输入格式 输入的第一行包含一个整数 N 第二行包含 N 个整数 W1 W2 W
  • [云原生专题-59]:Kubesphere云治理-操作-分步部署Web业务平台RuoYi Cloud项目 - 手工上云部署实际过程全部操作步骤

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123004798 目录 集群规划 第一
  • 【计算机组成原理】一位全加器

    一位全加器 在设计全加器的过程中 需要考虑如下两个问题 如何产生相加数的和数 如何产生相加数的进位数 和数的逻辑实现 和为 1 0 1
  • apifox测试excel文件上传,后端处理逻辑

    学习链接 api测试Excel Excel注解 任务描述 使用springboot框架与apifox测试软件以及ExcelUtil工具类完成对excel表的解析 并将数据转换为json格式 excel注解 apifox测试描述 补充说明 文
  • 详解CSS中的flex布局

    详解CSS中的flex布局 1 概念 2 容器属性 2 1 flex direction 2 2 flex wrap 2 3 flew flow 2 4 justify content 2 5 align items 2 6 align c
  • 【linux】宝塔Linux 8888 进不去

    宝塔面板安装好之后会分配一个ip和账户密码 但是用他分配的一直进不去 使用curl 127 0 0 1 8888 login也显示安全验证失败 解决方法 用自己虚拟机的ip 比如 10 13 12 25 就可以进去了 http 10 13
  • docker服务器出现/opt/n-bash: 无法为立即文档创建临时文件: 设备上没有空间问题

    服务器情况及遇到的问题 一台linux服务器 主要部署的为docker容器 出现当输入进入文件夹命令时 点击Tab 键不能自动出来文件夹名 如下 root web158 cd opt n bash 无法为立即文档创建临时文件 设备上没有空间
  • 从壹开始 [ Design Pattern ] 之二 ║ 单例模式 与 Singleton

    前言 这一篇来源我的公众号 如果你没看过 正好直接看看 如果看过了也可以再看看 我稍微修改了一些内容 今天讲解的内容如下 一 什么是单例模式 单例模式 英文名称 Singleton Pattern 这个模式很简单 一个类型只需要一个实例 他
  • python使用openai生成图像教程详解

    OpenAI 是一个人工智能的工具包 包括神经网络 遗传算法和有限状态机等 使用python可以非常便捷的操作OpenAI的API 一下是OpenAI官网列举的功能DEMO 首先使用python的pip进行openai库的安装 pip in
  • Springboot整合Nacos配置中心 多环境配置

    Nacos多环境的配置 方法一 1 在项目中的bootstrap yaml文件中配置激活指定的配置文件 spring application name gabriel cloud nacos config server addr 127 0
  • 如何申请iOS推送证书p12文件并配置极光推送平台

    编辑切换为居中 添加图片注释 不超过 140 字 可选 极光推送平台需要上传配置开发测试的iOS推送证书 开发环境 和上架到App Store的iOS推送证书 生产环境 以下是申请这两个环境的推送证书p12文件的教程 创建APP ID时勾选
  • 显卡检测工具:GPU-Z

    今天小编为大家测试了一款轻量级的GPU显卡的测试工具 可以查看GPU的详细信息 以供各位同学们学习 一 简单介绍 GPU Z是一款方便实用的软件工具 专门为用户提供视频卡和GPU的详尽信息 它具有轻巧的特点 不需要安装即可使用 并且可以一键
  • matlab中svd, svds, lansvd 函数

    首先我们看一下wiki上关于奇异值分解的理论描述 1 理论描述 假设M是一个m n阶矩阵 其中的元素全部属于域K 也就是实数域或复数域 如此则存在一个分解使得 displaystyle M U Sigma V 其中U是m m阶酉矩阵 是m
  • 小记初学android过程中遇到的小问题(android 4.4)

    在layout文件中有下面这样一个编辑框
  • List> 转 Map>

    将List转成Map结构 以下为没有水平的写法 好久之前写的土方法转换 不知道有没有优秀的解法 还希望大家提供 Map
  • 吸尘器电机拆解图解_家庭打扫全能选手-美的无线吸尘器P2G

    最近美的推出了一款轻便式家用吸尘器 一改吸尘器在心中笨大重托的形象 但具体清洁效果与实际体验如何呢 现在就让我们全方位探究一下这台美的无线吸尘器P2G 部件及功能介绍 包装小巧到我惊掉下巴 这真的就可以组装成一台吸尘器吗 打开包装 有序排列
  • JAVA多态(超详细讲解)

    目录 多态的基本介绍 实现多态的条件 1 继承 必须要有子类继承父类的继承关系 2 重写 子类需要对父类中的一些方法进行重写 然后调用方法时就会调用子类重写的方法而不是原本父类的方法 3 向上转型 在多态中需要将子类的引用赋给父类对象 只有