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

news2024/11/22 12:06:23

文章目录

  • 继承的练习题:
  • 多态
    • 多态实现条件
  • 动态绑定
  • 什么是重写
    • @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.coloradmin.cn/o/1145417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芯片封装简介【待补充】

TO封装 最开始的封装,这类封装三脚的比较多,比如7805 7812 等电源芯片 STO三脚贴片封装 TO的贴片形式 三极管和LDO比较常见 DIP封装 51单片机(双列直插式封装) SIP封装单列直插式封装(罕见) 5. SOP封…

出师表排序

一.原文件 二.代码 package org.example;import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.List;public class day12 {public static void main(String[] args) {try (BufferedReader br new BufferedReader(new FileReader(…

Android 3D Launcher锁定IMU界面

故事背景: 最近工厂反馈由于VR设备老化测试完成之后,变绿界面不明显,只占3D系统一部分,每次需要戴头盔,才能确定老化完成。导致工厂效率变低,如果后期产能变大,效率更低。 1、针对以上需求我们需要拆分 1、…

动态规划-扫地机器人最少初始电量

扫地机器人在一个方格形状的地图中执行清扫任务,地图中每一个格子代表一个房间,地图用一个数组来表示: 1)扫地机器人从地图左上角出发,每次清扫完一个房间后只能向石或向下走到另外一个房间,最后到达右下角…

LeetCode--196. 删除重复的电子邮箱

文章目录 1 题目描述2 解题思路2.1 代码实现 1 题目描述 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ----------------------id 是该表的主键列(具有唯一值的列)。 该表的每…

售货机相关的电路

一、货道选通矩阵电路,类似扫描电路,驱动哪个电机,就打开相应的行线与列线输出 二、MDB纸币器,虽然现在国内都是手机支付,但如果机器还是外销国外还是有用 三、硬币器电路,投币与退币,脉冲信号…

解决git action定时任务执行失败的方法

为了测试git action定时任务是否有效,你可能选择一个最近的时间测试, 但是发现怎么也触发不了,是不是觉得很苦恼。但是同样的时间,在第二天的定时任务又能成功运行。 这是什么原因? 原因就在上图,git act…

【算法|动态规划No.31 | 01背包问题】01背包模板题

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

[双指针](一) Leetcode 283.移动零和1089.复写零

[双指针] Leetcode 283.移动零和1089.复写零 移动零 283. 移动零 1.题意分析 (1) 给你一个数组,将数组中的所有0移动到数组的末尾 (2) 保证非0元素在数组中相对位置不变 (3) 在原数组中操作 2.解题思路 由于题目要求我们移动数组内容(也就是交换两…

LED主流光源

LED主流光源 条形光源 (1)产品特点: ① 条形光源是大面积打光的首选光源,性价比高; ② 颜色可根据需求搭配,自由组合; ③ 光源照射角度与安装灵活可调。 (2)应用领域&a…

【Java 进阶篇】Java Request 获取请求体数据详解

在Java Web开发中,获取HTTP请求的请求体数据是一项常见任务。HTTP请求的请求体通常包含了客户端提交的数据,例如表单数据、JSON、XML等。在Java中,可以使用HttpServletRequest对象来获取HTTP请求的请求体数据。本文将详细解释如何使用Java获取…

java基础巩固

JDK11和JDK8是oracle重点维护的 常用的包 单例 多例 枚举 jar包打包 测试

大模型之十九-对话机器人

大语言模型的最早应用是Chatbot,其实我最早接触语义理解在2014年,2014年做智能音箱的时候,那时也是国内第一批做智能音箱的,在现在看起来当时的智能音箱比较傻,很多问题无法回答,长下文效果也不好&#xff…

决定放弃uniapp开发了,因为它实在是没有taro友好

被uniapp折腾了两天,实在是受不了它对vue3的支持和react的支持,可以这么说,uniapp完全没有支持vue3和react,这么说我觉得一点也不过分。相对于折腾了两天uniapp来讲,我使用taro只花了1个小时不到,就可以完美…

IO流框架,缓冲流

一.缓冲流有什么优点 Java中的缓冲流(Buffered Stream)具有以下优势: 提高效率:缓冲流通过在内存中缓存一部分数据,减少了直接从内存到磁盘或从磁盘到内存的频繁IO操作,从而提高了读写效率。缓冲区大小调整…

最新ChatGPT源码+AI绘画系统+详细图文搭建部署教程+支持OpenAI-GPT全模型+国内AI模型

一、智能AI创作系统 Mental AI创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说Mental AI是目前国内一款的ChatGPT对接OpenAI软件系统。…

SOLIDWORKS参数化设计之格式转换 慧德敏学

现在越来越多的企业开始进行模型的参数化设计规范,不管是使用SOLIDWORKS自带的方程式,还是使用SOLIDWORKS参数化设计插件,参数化的过程其实已经很透明了,都大同小异。 我们之前介绍过SolidKits.AutoWorks软件,可以很方…

【Python3】【力扣题】191. 位1的个数

【力扣题】题目描述: 二进制“与”运算:(两个二进制中对应的每一位依次进行“与”运算) 1&11,0&10,0&00 【Python3】代码: 1、解题思路:整数转为二进制字符串&#xff…

LeetCode刷题:27. 移除元素

文章目录 ⭐️27. 移除元素⭐️🔐题目描述💡解题思路🔑代码 本题的题解代码是用C语言编写的。 📒博客主页:2023Fighting的博客主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 &a…