Java学习心得10——多态

2023-11-19

多态

一种类型的变量可以掌管多种类型的对象,这就是多态。

说人话:
直观理解成多种形态。人类就是多态的,黄种人、白种人、黑种人都是属于人类,人类这一个类可以表示黄种人、白种人、黑种人这三个类,这不就是多态多种形态吗?

回到编程:
Animal(动物)类型的变量可以有多种形态,它可以管理它的子类Cat、Dog、Fish、Tiger……的对象,也就是说可以这样写:

Animal animal1 = new Cat();
Animal animal2 = new Dog();
Animal animal3 = new Fish();
Animal animal4 = new Tiger();

类方法的多态

与变量一样,类的方法也是有多态性的。
举个例子:
一个Animal类型的变量,如果调用它的.bark()方法,那么这个方法的实现也是多态性的。
如果这个Animal类型变量实际管理的是Cat对象,那么我们在使用.bark()时就会调用Cat类的.bark()方法,如果它实际管理的是一个Dog对象,那么就会调用Dog类的.bark()。(如果Cat或Dog类没有.bark()方法则调用Animal的.bark()方法)也就是说,根据不同的对象,调用不同的方法。
不妨做个测试,我们将Cat对象交给一个Animal变量,然后使用.bark()方法,看看它究竟使用了Cat的.bark()方法还是Animal的.bark()方法:

Animal类代码:

package zoom;

public class Animal {
	public void bark() {
		System.out.println("I am Animal");
	}
	public static void main(String[] args) {
		Animal animal = new Cat(); 
		animal.bark();
	}
}

Cat类代码:

package zoom;

public class Cat extends Animal {
	@Override
	public void bark() {
		// TODO Auto-generated method stub
		System.out.println("喵");
	}
}

运行结果:
在这里插入图片描述

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

Java学习心得10——多态 的相关文章

  • Eclipse RCP - 将视图与编辑器区域堆叠?

    在开发 Eclipse RCP 应用程序时 是否可以将视图与编辑器区域堆叠在一起 像这样 我有多个列表 表格 我想创建一种预览组合 当通过单击鼠标选择列表上的项目时 我希望我的预览合成显示该项目的数据 如果用户双击某个项目 我想在预览合成后
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • Java ArrayList 和 HashMap 动态

    有人可以提供一个创建Java的例子吗ArrayList and HashMap在飞行中 所以而不是做一个add or put 实际上在类实例化时为数组 哈希提供种子数据 举个例子 类似于 PHP 的例子 array array 3 1 2
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • IntelliJ - 无效源版本:17

    我已经在 IntelliJ 中使用 Gradle 创建了一个使用 Java 17 的新 Java 项目 运行我的应用程序时出现错误Cause error invalid source release 17 我的设置 我已经安装了openjd
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值回绕到最小值

    我创建了一个带有值的整数微调器 min 5 max 15 and initialValue 12 and wrapAround true 一旦旋转器到达max 15 增量期间的值 而不是将值重置为min 5 正如它所说文档 https op
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • “强制更新快照/版本” - 这是什么意思

    在 Maven 项目中 选择 更新项目 时 有一个名为 强制更新快照 版本 的选项 它有什么作用 强制更新快照 版本 就像运行以下命令 mvn U install U 也可以用作 update snapshot 看here http boo
  • Web 服务客户端的 AXIS 与 JAX-WS

    我决定用Java 实现Web 服务客户端 我已经在 Eclipse 中生成了 Axis 客户端 并使用 wsimport 生成了 JAS WS 客户端 两种解决方案都有效 现在我必须选择一种来继续 在选择其中之一之前我应该 考虑什么 JAX
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear
  • 在Java内存管理中,“PS”代表什么?

    每当我看到 Java 中对内存的引用时 各种空格总是以 PS 为前缀 PS 是什么意思 它开始困扰我 到目前为止我唯一的猜测是 泳池空间 但这将是多余的 例子 PS伊甸园空间 PS 幸存者空间 PS 终身空间 老一代 PS Perm Gen
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList
  • Spring引导错误

    我正在使用 Spring BOOT 运行一个简单的桌面应用程序 下面是错误堆栈 org springframework beans factory BeanCreationException Error creating bean with

随机推荐

  • 1.3 安卓应用目录结构

    一 安卓应用视图 打开之前我们创建的安卓应用 HelloWorld 1 Project视图 安卓项目默认是Android视图 需要切换到Project视图 2 Package视图 切换到Package视图 3 Android视图 切换到An
  • 如何实现随机生成坐标点,并且使每个坐标点之间的距离大于某个距离?(用于散点图的绘制,进行数据的处理)

    背景 最近需要开发一个新需求 需要绘制一个随机生成数字的散点图 要求点与点的距离要大于某个特定值 解决思路 通过循环获取每个坐标点 每获取一个新的坐标点 都要与之前生成的坐标点进行对比 如果大于指定距离 则符合条件 退出循环 如果小于或等于
  • found input variables with inconsistene numbers of samples:[] 报错处理

    在用train text spilt进行机器学习的训练时候 出现了以下的报错 代码检查发现错误 train x train y test x test y train test split train x train y的行数不一致 应该改
  • 1分钟教你配置好你的python环境

    欢迎来到我们的系列博客 Python360全景 在这个系列中 我们将带领你从Python的基础知识开始 一步步深入到高级话题 帮助你掌握这门强大而灵活的编程语法 无论你是编程新手 还是有一定基础的开发者 这个系列都将提供你需要的知识和技能
  • 详解移植mjpg_streamer到arm板

    介绍 Mjpg streamer是一个开源软件 用于从webcam摄像头采集图像 把它们以流的形式通过基于ip的网络传输到浏览器如Firefox Cambozola VLC播放器 Windows的移动设备或者其他拥有浏览器的移动设备 mjp
  • 从0到1搭建自己的脚手架(java后端)

    一 脚手架是什么 脚手架是一种基础设施工具 用于快速生成项目的框架代码和文件结构 它是一种标准化的开发工具 使开发人员能够在项目的早期阶段快速搭建出一个具备基本功能和结构的系统 二 脚手架的意义 主流的微服务架构体系下很多公司会将原有的单体
  • SPSS 24安装后怎么打开的问题

    本人安装完spss 24之后打开发现还是需要许可证 再次输入完成就会全部关闭 解决方法 安装的步骤基本不会有问题 主要是针对出现安装完成 也填好许可证了的情况 可以通过下图对应的文件位置 双击打开 就可以使用了 安装包和教程可参考 链接 l
  • 多线程2(同步代码块+同步方法+同步锁+死锁)

    一 多线程同步 多线程的并发执行可以提高程序的效率 但是当多个线程去访问同一个资源时 有时也会引发一些安全性问题 例如 统计一个班上的学生人数时 学生有进有出会影响最终学生人数 为了解决这样的问题 需要实现多线程的同步 即限制某个资源在同一
  • 夯实C++基础之刷题:链表——相交链表

    一点点进步计划 首先要坚持刷题 刷题是一个将思路用代码实现的过程 2要自己看知识点 平时也看看面经 这样才与时俱进 先从每天能做一道题开始把 题目 1 相交链表 2 思路 看问题解析都用到了数学的双指针的方法 我是想不明白 但看解题的意思是
  • 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计...

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中 特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题 业务数据库中的一些数据发生了更改 到底要不要将这些变化也反映到数据仓库中 在数据仓库中 哪些数据应该随之变化
  • STM32 USB HID 自定义设备 bulk 传输

    ST 意法半导体公司 为STM32系列处理器编写了外设USB的库 并提供了很好的参考例程 本文就是参考ST提供的例程 在STM32F4 discovery板子上实现usb bulk传输 Host端是在linux平台上利用libusb库函数写
  • mysql 临时表权限_MySQL临时表浅析

    一 MySQL如何使用内部临时表 在某些情况下 服务器会在处理query的时候组建内部临时表 这种表有两种存在形式 1 位于内存中 使用的是MEMORY存储引擎 内存临时表 2 位于磁盘上 使用MyISAM存储引擎 硬盘临时表 服务器可能在
  • 再介绍一种低成本的负电源电路

    前面介绍了几种产生负电源的方法 几种常用的产生负电源的方法 今天再来介绍一种低成本的负电源电路 用分离元件搭建 配合程序控制 实现正电源转负电源 先看电路 图中Q1 D1 L2和C1构成最基本的Buck Boost电路 L1 C2为一级LC
  • myeclipse非正常关闭处理办法

    myeclipse正常或非正常关闭后 再次运行 不显示启动时的logo和读条 进入主页面后程序基本就卡死 无法正常运行 解决办法 方法一 修改工作空间在刚启动Myeclipse的时候会有一个选择工作空间的地方 换一个新的工作空间即可 若是原
  • Redis7之介绍(一)

    一 介绍 1 1 基本了解 Remote Dictionary Server 远程字典服务 是完全开源的 使用ANSIC语言编写遵守BSD协议 是一个高性能的Key Value数据库提供了丰富的数据结构 例如String Hash List
  • 面试题: v-if和v-show有什么区别?

    面试题 v if和v show有什么区别 1 v if能够控制是否生成vnode 也就间接控制了是否生成对应的dom 当v if为true时 会生成对应的vnode 并生成对应的dom元素 当其为false时 不会生成对应的vnode 自然
  • openwrt 缺少 libc.so.6 libm.so.6 libpthread.so.0

    在开发openwrt时 编译内核的时候 自己写的代码在openwrt 编译报错 提示缺少依赖库文件 Package Gateway Auto is missing dependencies for the following librari
  • flutter版本号对比

    版本号对比 Future
  • 筛选素数之欧拉筛法 python实现 附带证明

    返回类型 列表 说明 返回小于upperBound的所有素数 def ouLaShai upperBound filter False for i in range upperBound 1 primeNumbers for num in
  • Java学习心得10——多态

    多态 一种类型的变量可以掌管多种类型的对象 这就是多态 说人话 直观理解成多种形态 人类就是多态的 黄种人 白种人 黑种人都是属于人类 人类这一个类可以表示黄种人 白种人 黑种人这三个类 这不就是多态多种形态吗 回到编程 Animal 动物