【继承练习题--多态-- 动态绑定-- 重写】

文章目录

  • 继承的练习题:
  • 多态
    • 多态实现条件
  • 动态绑定
  • 什么是重写
    • @Override 注解
    • 重写的条件(缺一不可)
    • 有一种特殊的重写:叫协变类型
    • 重写的设计原则
    • 快捷键生成重写
    • 重写和重载的区别
    • object类是所有类的父类
  • 总结


继承的练习题:

在这里插入图片描述
2.
在这里插入图片描述
3.
通过子类引用 能调用父类成员变量或方法
但通过父类引用 只能调用自己特有的成员变量或成员方法
调用子类的会报错
在这里插入图片描述
在这里插入图片描述


多态

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
在生活中,多态就是同一个人对不同的人表现的态度说的话是不一样的

多态实现条件

在java中要实现多态,必须要满足如下几个条件,缺一不可:

  1. 必须在继承体系下,向上转型
  2. 子类和父类有同名的重写方法
  3. 通过父类的引用调用重写的方法

完成以上三点,就会发生动态绑定,而动态绑定是多态的基础

动态绑定

程序运行时,绑定到了子类的方法,这就叫做动态

子类加了一个与父类一模一样的成员方法,通过父类的引用调用这个方法时,惊奇地发现调用的是子类的方法,这个过程就叫做动态绑定

什么是重写

class Animal{public String name;public int age;public void eat(){System.out.println(this.name+"正在吃蛋糕");}public Animal(String name, int age) {this.name = name;this.age = age;}
}
class Dog extends Animal{public void bark(){System.out.println(this.name+"在汪汪叫");}public Dog(String name, int age) {super(name, age);}public void eat(){System.out.println(this.name+"正在吃狗粮");}
}public class Test {public static void func(Animal animal){}public static void main2(String[] args) {//向上转型//让Animal引用指向dog所引用的对象new Dog("圆圆",19);Dog dog = new Dog("圆圆",19);func(dog);}public static void main(String[] args) {//向上转型Animal animal =new Dog("圆圆",16);animal.eat();}
}
  1. 代码上会标有两个符号告诉你这是重写

在这里插入图片描述

在这里插入图片描述

@Override 注解

  1. 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验.

例如不小心将方法名字拼写错了 (比如写成 aet), 编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写
在这里插入图片描述

重写的条件(缺一不可)

在这里插入图片描述

有一种特殊的重写:叫协变类型

被重写的方法返回值类型可以不同,但是必须是具有父子关系的
在这里插入图片描述

重写的设计原则

若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅可以显示号码,还可以显示头像,地区等。在这个过程当中,我们不应该在原来老的类上进行修改,因为原来的类,可能还在有用户使用,正确做法是:新建一个新手机的类,对来电显示这个方法重写就好了,这样就达到了我们当今的需求了。

快捷键生成重写

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

重写和重载的区别

在这里插入图片描述

object类是所有类的父类

在这里插入图片描述

在这里插入图片描述

总结

今天学了多态,动态绑定的原理是向上转型,子类和父类的同名,也就是重写,还要通过父类引用调用这个方法,那么这个方法一定会是子类的。如果不实现重写,object类是所有类的父类,调用的自然是object的方法。还要区分重写和重载,别混淆。

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

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

相关文章

支付宝证书到期更新完整过程

如果用户收到 支付宝公钥证书 到期通知后,可以根据如下指引更新证书 确认上传成功后就会生成新的证书,把新的证书替换到生产环境就可以了

标准ACL,扩展ACL,基本ACL,高级ACL

其实标准ACL,扩展ACL,基本ACL,高级ACL是同一个概念的不同名称,区别在于: 思科路由器支持标准ACL和扩展ACL两种类型的访问控制列表,没有”基本ACL“和”高级ACL“的概念,而华为路由器都支持 编号范围&…

基于鸟群算法的无人机航迹规划-附代码

基于鸟群算法的无人机航迹规划 文章目录 基于鸟群算法的无人机航迹规划1.鸟群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用鸟群算法来优化无人机航迹规划。 1.鸟群搜索算法 …

[java/力扣110]平衡二叉树——优化前后的两种方法

分析 根据平衡二叉树的定义,只需要满足:1、根节点两个子树的高度差不超过1;2、左右子树都为平衡二叉树 代码 public class BalancedBinaryTree {public class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(){}TreeNode(int va…

springboot第44集:Kafka集群和Lua脚本

servers:Kafka服务器的地址。这是Kafka集群的地址,生产者将使用它来发送消息。retries:在消息发送失败时,生产者将尝试重新发送消息的次数。这个属性指定了重试次数。batchSize:指定了生产者在发送消息之前累积的消息大…

2.flink编码第一步(maven工程创建)

概述 万里第一步,要进行flink代码开发,第一步先整个 flink 代码工程 flink相关文章链接 flink官方文档 两种方式 一种命令行 mvn 创建,另一种直接在 idea 中创建一个工程,使用 mvn 的一些配置 mvn命令行创建 mvn 创建flink工程&…

基于SpringBoot的工厂车间管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 人员管理 看板信息管理 设备信息管理 生产开立管理 人员功能实现 生产开立管理 生产工序管理 生产流程管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 社会发展日新月异,用计…

6.scala辅助构造器与为构造函数提供默认值(一)

概述 本文主要说明: 辅助构造器 与 为构造函数提供默认值 的使用 辅助构造器为构造函数提供默认值 相关链接 阅读之前,可以浏览一下 scala相关文章 辅助构造器 可以通过定义名为this的方法来定义辅助Scala类构造函数。只有几个规则需要了解: 每个辅助…

冯诺依曼体系结构、进程、环境变量

冯诺依曼体系结构、进程、环境变量 一、冯诺依曼体系结构1、结构图2、示例3、CPU与数据 二、进程1、概念2、查看进程(1)通过/proc系统文件夹(2)通过top和ps用户级工具(3)通过系统调用 3、通过系统调用创建进…

会声会影2024这款视频剪辑软件怎么样?

众所周知,每每有新兴行业逐渐崛起壮大的时候,随机而来的就是这个行业创造出的衍生行业,比如说现在的短视频平台或者是视频剪辑行业,都是很明显的例子,今天我们就针对剪辑软件来和大家聊一聊,会声会影2024这…

论坛搭建.

目录 一.配置软件仓库 二.安装http php miriadb 三.配置数据库 一.配置软件仓库 1.进入仓库目录 cd /etc/yum.repos.d 2.创建仓库文件 vim local.repo 3.在 local.repo中写入:(粘贴的时候注意位置) [biaoshi] 仓库标识符 namemiaoshu …

禁用Google Chrome自动升级、查看Chrome版本号

问题 查看Chrome版本时,会自动升级,这个设计很垃圾,对开发者不友好;查看Chrome版本方法:chrome浏览器右上角—>自定义及控制Google Chrome(三个竖着的点号)------>帮助---->关于Google Chrome。 解决办法 禁用自动升级…

[Unity][VR]透视开发系列3-Passthrough应用的真机测试方法

【视频讲解】 视频讲解地址请关注我的B站。 专栏后期会有一些不公开的高阶实战内容或是更细节的指导内容。 B站地址: https://www.bilibili.com/video/BV1Zg4y1w7fZ/ 我还有一些免费和收费课程在网易云课堂(大徐VR课堂): https://study.163.com/provider/480000002282025/…

Open3D(C++) 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 平面方程的一般表达式为: A x + B y + C

14个最实用的WordPress SEO插件推荐

在这篇文章中,将为你推荐最有利于网站SEO的WordPress插件,这里介绍这些插件的主要功能及使用技巧,合理使用它们将有助于网站SEO排名。无论你是一个刚刚开始的博客作者,还是一个经验丰富的企业网站管理员,我们都将帮助你…

洛谷P1765 手机 / 秋季赛 九宫格

手机 题目描述 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下。例如要按出 x \tt x x 就得按 9 9 9 两下,第一下会出 w \tt w w,而第二下会把 w \tt w w 变成 x \tt x x。 0 0 0 键按一下会出一个空格。 你的任务是…

React 你还在用 Redux 吗?更简化的状态管理工具(Recoil)

以往传统的 Redux 状态管理工具使用起来代码太过于复杂。 你需要通过纯函数触发 action 再去修改 data 中定义的数据,而且要通过接口请求数据还需要借助 redux - think 这个中间件才能完成。。。 更加方便使用的工具:Recoil ~ 由 facebook 推出契合 R…

使用示例和应用程序全面了解高效数据管理的Golang MySQL数据库

Golang,也被称为Go,已经成为构建强大高性能应用程序的首选语言。在处理MySQL数据库时,Golang提供了一系列强大的库,简化了数据库交互并提高了效率。在本文中,我们将深入探讨一些最流行的Golang MySQL数据库库&#xff…

RabbitMQ学习05

文章目录 交换机1.Exchanges1.1 概念1.2 类型1.3 无名exchange 2. 临时队列3. 绑定(bings)4. Fanout4.1 介绍 5.Direct exchange5.1 介绍5.2 多重绑定5.3 实战: 6. Topics6.1 规则6.2 实战 交换机 1.Exchanges 1.1 概念 RabbitMQ 消息传递模型的核心思…

【Tomcat】如何在idea上部署一个maven项目?

目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例: 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…