JavaSE:继承 多态

继承

继承的本质

子类能够使用父类的方法和变量

使用场景:代码复用

在一个类中实现了一个很复杂的方法,给一个新类重新实现这个方法,我们直接继承即可

public class Student {public String sno;public void study() {System.out.println(sno + "学生应该努力学习!");}
}class XiaoMing extends Student {}class XiaoHong extends Student {}class Test {public static void main(String[] args) {XiaoMing xiaoMing = new XiaoMing();XiaoHong xiaoHong = new XiaoHong();xiaoMing.sno = "123";xiaoHong.sno = "456";xiaoMing.study();xiaoHong.study();}
}

重点:继承的内存图

xiaoMing对象和xiaoming对象,分别对应一个匿名的Student对象

加载XiaoMing类之前,先扫描再加载,扫描到有父类,就先加载父类

创建好的父类对象,由子类的对象的super指针指向匿名的父类对象

方法重载和方法重写

方法重载

方法重载发生在同一个类当中,方法的重载要求:

  1. 方法名相同(修饰符可以不同,方法返回类型+方法名必须相同)
  2. 参数列表不同

参数列表不同,主要分为以下情况:

  1. 参数列表数量不同
  2. 参数列表的数量相同,类型不同
public class Student {public String sno;public void study() {System.out.println(sno + "学生应该努力学习!");}public void study(String sno){this.sno = sno;}public void study(String sno){this.sno = sno;}
}

方法重写(重点)

发生在父子类当中,子类可以重写父类的方法。

重写父类的方法,要求:

  1. 重写父类的方法的实现逻辑
  2. 方法名,参数列表必须相同
  3. 返回值类型<=父类
  4. 抛出异常<=父类

子类对象调用重写的方法,优先调用自己的,自己没有才会调用父类的

super关键字

  1. 在子类方法当中调用父类的方法
  2. 调用父类的构造器,只能在子类构造器的第一行使用

继承的层次

Java只支持单继承,C++支持多继承

一个父类对应多个继承的子类,是合法的

但是一个子类有多个父类,是非法的

大白话:一个父类可以有多个子类,一个子类只能有一个父类

向上转型

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

假设有一个方法,参数是A类的对象,那么B,C,D类的对象都是可以的,这就是向上转型

转型时,遵循就近原则,a方法参数是B类对象,b方法参数是A类对象,现在传入一个C类对象作为参数

a方法执行,b方法不执行

继承的内存图(非常重要)

建议看看这篇博客,讲的非常清楚

java 继承关系的内存图解 (通俗易懂)_java继承的内存模型

只有明白了继承的内存图,后面多态才能理解

多态

本质:父类引用,指向子类对象

在这里插入图片描述

方法与变量的使用

多态创建的父类引用的可能会遇到的两种情况:

非重写的成员方法+成员变量:看父类,多态的父类对象不能执行子类的非重写方法,也不能访问子类的变量(具有父类对象的形态

重写的成员方法:看子类(因为子类的方法把父类的方法覆盖掉了),多态的父类对象只能执行子类的重写的方法,自己的方法被覆盖(具有子类对象的形态

同时拥有两种形态,所以叫多态

多态的内存图

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

在这里插入图片描述

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

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

相关文章

Spring Boot 中Mybatis使用Like的使用方式和注意点

说明 模糊查询在项目中还是经常使用的&#xff0c;本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。 使用Springboot简单配置一下Mybatis&#xff0c;然后进行说明。Springboot集成Mybatis这里就不做介绍了&#xff0c;这里我们主要介绍一下在mybat…

【Rust】——项目实例:——命令行实例(一)

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)

1.简介 上一篇宏哥用PageFactory实现了POM&#xff0c;宏哥再介绍一下如果不用PageFactory如何实现POM。 2.项目实战 在这里宏哥以百度首页登录的例子&#xff0c;如果用POM实现&#xff0c;在测试脚本中实际代码就几行。 2.1代码设计 1.先新建一个pageObjects包&#xff…

算法打卡day38

今日任务&#xff1a; 1&#xff09;完全背包理论基础(卡码网52. 携带研究材料) 2&#xff09;518.零钱兑换II 3&#xff09;377. 组合总和 Ⅳ 4&#xff09;复习day13 完全背包理论基础(卡码网52. 携带研究材料) 题目链接&#xff1a;52. 携带研究材料&#xff08;第七期模拟…

使用LangChain和GPT-4,创建Pandas DataFrame智能体

大家好&#xff0c;数据分析和数据处理是数据科学领域每天都在进行的基本任务。高效和快速的数据转换对于提取有意义的见解和基于数据做出明智决策至关重要。其中最受欢迎的工具之一是Python库Pandas&#xff0c;它提供了一个功能强大的DataFrame工具&#xff0c;使用灵活直观的…

docker部署sqlserver过程记录

目录 前言 一、基础概念 二、过程步骤 1.docker操作 2.问题及解决 总结 前言 最近接触到了NL2SQL&#xff0c;有个相对比较适合自己的开源项目&#xff0c;就说看下。忽然发现自己电脑都没安装个数据库。那就安装一个吧&#xff0c;自从有了docker&#xff0c;能docker安…

华为OD-C卷-开源项目热榜[100分]Python3-100%

题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。 对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源…

基于51单片机土壤湿度检测及自动浇花系统

基于51单片机土壤湿度检测及自动浇花 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.LCD1602实时显示湿度、湿度上下限&#xff1b; 2.可用按键设置湿度、湿度上下限&#xff1b; 3.当湿度低于下限…

分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机数据…

搭建电商供应链需要用到哪些电商接口?||主流电商API接口解说

搭建供应链系统时&#xff0c;您可能需要与电商平台进行集成&#xff0c;以实现订单管理、库存同步、物流跟踪等功能。以下是一些常见的电商接口&#xff0c;可以帮助您构建供应链系统&#xff1a; 1. **淘宝开放平台接口**&#xff1a;淘宝开放平台提供了丰富的接口&#xff…

(六)PostgreSQL的组织结构(2)-默认数据库

PostgreSQL的组织结构(2)-默认数据库 安装完postgresql后&#xff0c;我们发现它自带了3个数据库。postgres、template0、template1 postgres# \lList of databasesName | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules |…

4399下架了的flash游戏 网盘自提取

下载好游戏后&#xff0c;需要使用flash进行打开&#xff0c;直接拖动游戏文件到flash文件&#xff0c;即可用flash快捷打开。 flash下载 百度网盘链接&#xff1a;https://pan.baidu.com/s/1KUz4ymg0SS7wFGH54hdE3A?pwdnisj 提取码&#xff1a;nisj 一、幻想纹章 不太行了…

elasticsearch 关于向量化检索

1、elasticsearch使用的是8.5.0 索引和mapping构建&#xff1a; PUT image-index {"mappings": {"properties": {"mydatavector": {"type": "dense_vector","dims": 3,"index": true,"similarit…

什么是死锁?死锁产生的条件是什么?

死锁 死锁是指两个或两个以上的进程(或线程&#xff09;在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进…

【学习】linux实用命令

LINUX命令 普通用户查询系统信息 命令 &#xff1a; [wlm]$ cat /ect/os-release NAME "Kylin" VERSION ""功能&#xff1a; 这个输出会告诉你正在使用的操作系统的名称&#xff08;NAME&#xff09;、版本&#xff08;VERSION 或 VERSION_ID&#xf…

基于sfunction builder的c-sfunction编写——自定义函数编写

目录 前言 1、sfunction builder自定义函数编写方法一 2、sfunction builder自定义函数编写方法二 3.总结

Node.JS后端开发笔记整理(简洁版)

前端 1. 开发环境和技术栈 开发工具&#xff1a;Visual Studio CodeNode.js版本&#xff1a;18.19.0&#xff08;建议保持在18&#xff09;包管理器&#xff1a;npm前端框架&#xff1a;Vue3.4脚本语言&#xff1a;TypeScript构建工具&#xff1a;Vite后端框架&#xff1a;Ex…

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

异步FIFO约束set_max_delay

1.最大延迟set_max_delay set_max_delay [-datapath_only] -from [ node_list] -to [node_list] delay_value 在Set Max Delay约束中使用-datapath_only选项时&#xff0c;它指示综合工具在优化设计时仅考虑数据通路的延迟&#xff0c;而不考虑控制逻辑的延迟。 关于最大最小…