多态的笔记

什么是多态

顾名思义多态就是让一个对象拥有不同的形态
举例如下
image.png
多态的应用场景,比如你注册的时候,你可能注册为学生,老师,管理员,但是此时你往函数传递的类型是什么呢,此时你无论传递什么都不太合适,我们最好的是传递父类,这样无论你向这个函数中传递学生还是老师或者管理员,这个函数都能够成功的接收,不会报错
image.png

什么是多态

  1. 同类型的对象,表现出的不同形态

多态的表现形式

  1. 父类类型对象名称 = 子类对象;除了我们现在自己构建的类的对象,我们遇到的最常见的多态就是集合的多态

比如

public class test {// 用来测试这个java中的集合类的多态public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("hello");list.add("world");System.out.println(list);}
}

其中这个 list 就是一个父类,然后这个 Arraylist 就是一个子类
images
关于集合的文章请参考我的这一篇文章
集合的笔记
多态的前提

  1. 有继承关系
  2. 有父类引用指向子类对象
  3. 有方法重写

多态方式创建对象

Fu f = new Zi();

调用成员变量的时候,编译看左边,运行也看左边

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

调用成员方法的时候, 编译看左边, 运行看右边

我们再 javac 编译的时候我们先看父类中有没有这个变量, 如果有则编译成功, 如果没有则编译失败
但是再运行的时候调用的确实子类的方法, 因为这里面涉及到了方法的重写, 父类的方法被再虚方法表中被覆盖掉了.

多态的优势和弊端

在多态形式下,右边对象可以实现解耦合,便于扩展和维护。

image.png

刚开始我们想让学术工作, 但是后面几天我们想让老师去工作, 这个时候我们就只需要改变这个 student 就行了

定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。

当我们向 StringBuilder 中添加数据的时候我们可以添加所有的对象类型, 这就是因为这个 obj 是所有的对象的父类, 满足多态的定义
image.png

我们定义集合的时候我们可以设置这个添加类型在尖括号里面, 如果我们不写这个尖括号, 那么我们就可以添加任意类型的数据

多态的优势

我们在调用方法的时候不能调用子类的特有功能, 因为这样编译就通过不了.
解决方案
我们将这个父类类型转换为子类类型就可以了

Animal a = new Dog();
a.lookhouse();//报错
Dog b = (Dog) a;//强制类型转换

转换的时候不能进行瞎转化, 猫不能转换为狗, 所以我们在转换的时候要进行判断这个转换是不是合理的 e
image.png

JDK 14 以后感觉这个写的太麻烦了, 添加了一个新特性, 可以将转化和判断写在一行
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Marin说PCB之封装设计系列---(02)--异形焊盘的封装设计总结

每天下班回家看电视本来是一件很美好的事情&#xff0c;可是正当我磕着瓜子看着异人之下的时候&#xff0c;手机突然响起来了&#xff0c;我以为是我们组哪个同事找我呢。一接电话居然是我的老朋友陈世美陈总&#xff0c;江湖人称少妇杀手。给我打电话主要是说他最近遇到一个异…

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览…

【建议收藏】自动化测试框架开发教程

在自动化测试项目中&#xff0c;为了实现更多功能&#xff0c;我们需要引入不同的库、框架。 首先&#xff0c;你需要将常用的这些库、框架都装上。 pip install requests pip install selenium pip install appium pip install pytest pip install pytest-rerunfailures pip …

华为GaussDB数据库

Gauss数据库初识_高斯数据库_ygpGoogle的博客-CSDN博客 Redhat 7.6安装GaussDB_100_1.0.1详细攻略_gaussdb_100_1.0.1-database-redhat-64bit.tar.gz dow_博德1999的博客-CSDN博客 https://www.ngui.cc/el/3381579.html?actiononClick 初识GaussDB——GaussDB的发展历程、部…

学习Bootstrap 5的第六天

目录 信息警告框 警告框 实例 警告框链接 实例 关闭警告框 实例 警告框动画 实例 按钮 按钮样式 实例 按钮轮廓 实例 ​编辑按钮尺寸 实例 块级按钮 实例 实例 活动/禁用按钮 实例 加载器按钮 实例 扩展小知识 按钮组 按钮组 实例 实例 垂直按钮组…

python自(2)切片 字典 遍历删除添加修改查询定义函数函数返回值作用域序列化异常报错urllib使用一个类型六个方法下载 视频音频图片

切片 # # 切片# s hello word# # 下标索引为0的 # print(s[0]) #h# # 左闭右开 &#xff08;左是下标开始的&#xff0c;右是几个索引值&#xff09;例如从0开始算 4个索引值 # print(s[0:4]) #hell# # 更改起始值的开始位置 # print(s[1:]) #ello word# # 下标结束位置 # p…

DC/DC开关电源学习笔记(七)低压大电流DC/DC变换技术

低压大电流DC/DC变换技术 1. 无暂态要求的低压大电流DC/DC变换技术2. 负载极其快速变化的低压大电流DC/DC变换技术2.1 非隔离型 VRM2.2 隔离型VRM低压大电流高功率 DC/DC 变换技术,已从前些年的 3.3V 降至现在的 1.0V 左右,电流目前已可达到几十安至几百安。同时,电源的输出指标…

动态IP代理是什么?一文看懂动态代理IP

一、什么是动态IP代理&#xff1f; 动态IP代理是一种代理服务&#xff0c;而动态IP是由ISP动态分配给用户的IP地址&#xff0c;这些IP地址会周期性地更改。每次链接互联网时&#xff0c;用户会被分配一个新的IP地址&#xff0c;因而也称为”轮换IP”。 IP地址轮换是一个过程&…

9.8C++作业

1> 自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量 成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 #include <iostream>using namespace std;class…

释放数据价值这道难题,Smartbi V11有解

《未来简史》预言&#xff1a;数据将成为人们未来的信仰。 未来已来&#xff0c;将至已至。如今&#xff0c;数据所扮演的角色与作用超乎想象。从政府将数据要素列入生产要素之中&#xff0c;到数据驱动型业务场景涌现&#xff0c;企业与组织对于数据及其价值的认可度明显提升…

JUC相关面试题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱发博客的嗯哼&#xff0c;爱好Java的小菜鸟 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;社区论坛&#xff1a;希望大家能加入社区共同进步…

二叉树题目:最大层内元素和

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;最大层内元素和 出处&#xff1a;1161. 最大层内元素和 难度 4 级 题目描述 要求 给定一个二叉树的根结点 ro…

前端vue按钮控制切换按钮是否禁用和颜色和显示隐藏,利用v-if和v-else

效果 未输入input前图片 输入input后图片 html (1) <input type"number" placeholder"请输入分润数量" placeholder-class"shareprofit_placeholder_num" v-model"money"> <!-- 金钱 --> {{money}} <!-- 可提现余额…

Generative Adversarial Nets

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 生命不息&#xff0c;折腾不止 Reference&#xff1a; [1] Goodfellow, I, Pouget-Abadie, J, Mirza, M, Xu, B, Warde-Farley, D, Ozair, S, Co…

【绝㊙️】三年开发内功心得

经典嵌套if-else问题 这个也是老生常谈问题了&#xff0c;不管哪里都能看到。 那如何解决 方法一&#xff08;重要&#xff09;&#xff1a; 如果逻辑分支过多&#xff0c; 即使你不解决嵌套if-slse&#xff0c;至少也要把每个 if的{}里的逻辑抽到一个独立的方法或者工具类…

Vue中extend基本用法

1.Vue.extend(options) 参数: {Object} options用法&#xff1a; 使用基础Vue构造器&#xff0c;创建一个"子类"。参数是一个包含组件选项的对象。 data选项是特例&#xff0c;需要注意&#xff0c;在Vue.extend()中它必须是函数。 <html><head><tit…

Unity中Shader抓取屏幕并实现扭曲效果(优化)

文章目录 前言一、在之前顶点着色器的输入中&#xff0c;放弃了使用结构体传入&#xff0c;而是直接从应用程序阶段传入参数&#xff0c;这样写的话&#xff0c;对于程序来说&#xff0c;不方便扩张&#xff0c;所以需要对其进行修改实现1、定义结构体用于传入顶点坐标系2、因为…

离散数学 学习 之 一阶逻辑基本概念 ( 四 )

好好理解这个 代换实例&#xff0c;每个 谓词公式 都替换一个 命题公式 在蕴含式 中 &#xff0c;只有前式 为 假 &#xff0c;后式 为 真&#xff0c;这个式才是假的 &#xff0c;可以利用 这个进行判断 找个 成真解释 &#xff0c;找个 成假 解释 不能 替换 才去 找 解释 &…

C++信息学奥赛1171:大整数的因子

该程序是一个寻找能够整除输入数字的最小正整数的程序。下面是代码的逻辑解析&#xff1a; #include <iostream> #include <string> #include <cstring>using namespace std;int main() {string n; // 定义一个字符串变量nint fale 0; // 用于标记是否能…

C++学习笔记二(堆栈、指针、命名空间、编译步骤)

C 1、堆和栈2、指针2.1、指针的本质2.2、指针的意义2.3、清空指针2.4、常量指针和指针常量2.4.1、常量指针&#xff08;const int *p;&#xff09;2.4.2、指针常量&#xff08;int *const p;&#xff09; 2.5、C类中的this 3、malloc and new4、命名空间4.1、创建命名空间4.2、…