当前位置: 首页 > news >正文

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【297-313】

文章目录

  • 297. super基本语法
    • 297.1 基本介绍
    • 297.2 基本语法
  • 298. super使用细节1
  • 299. super使用细节2
  • 300. super使用细节3
  • 301. 方法重写介绍
  • 302. 方法重写细节
  • 303. 重写课堂练习1
  • 304. 重写课堂练习2
  • 输出结果: 姓名:田所浩二 年龄:24
  • 305. 养宠物引出多态
  • 306. 方法的多态
  • 307. 对象的多态
  • 308. 多态快速入门
  • 309. 向上转型
  • 310. 向下转型
  • 311. 属性重写问题
  • 312. 多态课堂练习1
  • 313. 多态课堂练习2

297. super基本语法

297.1 基本介绍

super 代表父类的引用,用于访问父类的属性、方法、构造器

297.2 基本语法

298. super使用细节1

  1. 调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super. 如果没有重名,使用super、this、直接访问是一样的效果。


    子类父类成员和方法不重名,则直接调用:

    属性也是遵循上述规则

299. super使用细节2


也就是说父类没有但是父类的父类有的成员,在这个子类中也能用super关键字访问。

300. super使用细节3

  • super和this的比较

    this和super放在首行只能二选一

301. 方法重写介绍


【注】这里的子类和父类不一定是“一层”的关系,有可能是A<-B<-C


JVM会就近调用子类的cry()方法

302. 方法重写细节

方法重写也叫方法覆盖,需要满足下面的条件

303. 重写课堂练习1

请对方法的重写和重载做一个比较

304. 重写课堂练习2

  1. 编写一个 Person 类,包括属性/private(name、age),构造器、方法 say(返回自我介绍的字符串)。
  2. 编写一个 Student 类,继承 Person 类,增加 id、score 属性/private,以及构造器,定义 say 方法(返回自我介绍的信息)。
  3. 在 main 中,分别创建 Person 和 Student 对象,调用 say 方法输出自我介绍
    Person.java
package com.Marisa.overrideexe;public class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//say输出个人信息public void say(){System.out.println("姓名:" + name);System.out.println("年龄:" + age);}
}

Student.java

package com.Marisa.overrideexe;public class Student extends Person{private int id;private double score;public Student(String name, int age, int id, double score) {super(name, age);this.id = id;this.score = score;}public int getId() {return id;}public void setId(int id) {this.id = id;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}//say输出信息public void say(){super.say();System.out.println("id:" + id);System.out.println("分数:" + score);}
}

OverrideExercise.java

package com.Marisa.overrideexe;import com.Marisa.overrideexe.Student;public class OverrideExercise {public static void main(String[] args) {Person person = new Person("田所浩二", 24);Student student = new Student("德川", 26, 114514, 114514.1919);person.say();System.out.println("==============");student.say();}
}

输出结果:
姓名:田所浩二
年龄:24

姓名:德川
年龄:26
id:114514
分数:114514.1919

305. 养宠物引出多态


传统方法写7个类:


如果再写猫喂鱼,又要重载一个方法,feed的类型越来越多,一直写重载,很繁琐,多态可以提高代码的复用性。

306. 方法的多态

方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

307. 对象的多态



【注】也就是说,能够用一个父类的引用指向子类的对象。
Animal.java

package com.Marisa.objectpoly_;public class Animal {public void cry(){System.out.println("动物在叫");}
}

Cat.java

package com.Marisa.objectpoly_;public class Cat extends Animal{public void cry() {System.out.println("Cat cry() ");}
}

Dog.java

package com.Marisa.objectpoly_;public class Dog extends Animal{public void cry() {System.out.println("Dog cry()");}
}

PolyObject.java

package com.Marisa.objectpoly_;public class PolyObject {public static void main(String[] args) {//多态的特点Animal animal = new Dog();animal.cry();//因为运行时,animal运行类型是Dog,所以cry就是Dog的cryanimal = new Cat();animal.cry();}
}

运行结果:
Dog cry()
Cat cry()

308. 多态快速入门


利用多态的机制,父类的引用可以指向子类

309. 向上转型

多态的前提是:两个对象(类)存在继承关系
多态的向上转型






310. 向下转型



311. 属性重写问题





312. 多态课堂练习1

313. 多态课堂练习2

s和b都是引用,都指向同一个地址

this是先就近查找,如果没用再查父类

相关文章:

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【297-313】

文章目录 297. super基本语法297.1 基本介绍297.2 基本语法 298. super使用细节1299. super使用细节2300. super使用细节3301. 方法重写介绍302. 方法重写细节303. 重写课堂练习1304. 重写课堂练习2输出结果&#xff1a; 姓名&#xff1a;田所浩二 年龄:24305. 养宠物引出多态3…...

快递批量查询物流追踪只揽收无物流信息的单号

在电子商务和物流领域&#xff0c;快递单号的追踪是确保货物顺利送达的关键环节。然而&#xff0c;在实际操作中&#xff0c;经常会遇到一些只显示揽收信息而没有后续物流更新的单号&#xff0c;这给商家和买家都带来了不小的困扰。本文将介绍如何通过快递批量查询物流的方法&a…...

【动态网站资源保存下载】

文章目录 概要解决思路技术细节小结 概要 我们在网上浏览网站时&#xff0c;经常有这样的需求&#xff1a;将浏览的网页保存下来&#xff0c;即使无网的情况下也可以继续浏览。比如一些教育类网站的PPT&#xff0c;内容为HTML格式的&#xff0c;无法作为PPT格式下载下来&#…...

Selenium自动化测试中如何处理数据驱动?

在自动化测试中&#xff0c;数据驱动&#xff08;Data-Driven Testing&#xff09;是指通过外部数据源&#xff08;如Excel、CSV、数据库等&#xff09;来控制测试用例的执行&#xff0c;而不是直接在代码中硬编码数据。这种方式可以提高测试的灵活性和可维护性&#xff0c;使得…...

淘宝API接口系列有哪些内容?

淘宝API&#xff08;Application Programming Interface&#xff09;接口系列是一套允许开发者与淘宝平台进行数据交互的接口集合&#xff0c;涵盖了商品信息、订单信息、物流信息、用户信息以及营销等多个方面的数据接口。以下是对淘宝API接口系列内容的详细归纳&#xff1a; …...

华为OD机试 - 冠亚军排名(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…...

VmWare中安装CenterOs(内网服务器)

VmWare中安装CenterOs(内网服务器) 文章目录 VmWare中安装CenterOs(内网服务器)[toc] 一 、CentOS 7的下载与安装1、下载2、安装&#xff08;1&#xff09;前期准备&#xff08;2&#xff09;正式安装 开始等待&#xff01;&#xff01;&#xff01; 二、软件仓库更换1、root用…...

JS 数组去重 — 各类场景适合方法大全

JS 数组去重 — 各类场景适合方法大全 本文介绍各种场景 JS 去重 方法使用 性能最好、用的最多、场景大全 文章目录 JS 数组去重 — 各类场景适合方法大全 一、基础篇&#xff1a;简单直观的去重方法1. 使用Set数据结构2. 利用filter和indexOf方法3. reduce方法的应用 二、进阶…...

【Java 问题】集合——List

List 1.说说有哪些常见集合&#xff1f;2.ArrayList和LinkedList有什么区别&#xff1f;3.ArrayList的扩容机制了解吗&#xff1f;4.ArrayList怎么序列化的知道吗&#xff1f; 为什么用transient修饰数组&#xff1f;5.快速失败(fail-fast)和安全失败(fail-safe)了解吗&#xf…...

xss 跨站脚本攻击

XSS 的全称是 Cross-Site Scripting&#xff08;跨站脚本攻击&#xff09;。是一种常见的web安全漏洞。 1. XSS 的定义 XSS 是一种注入类型的攻击&#xff0c;攻击者将恶意脚本注入到受信任的网站中。当其他用户访问该网站时&#xff0c;这些脚本会在用户的浏览器中执行。 2…...

5.toString()、构造方法、垃圾回收、静态变量与静态方法、单例设计模式、内部类

文章目录 一、toString()1. 优缺点2. 使用方法举例① Dos类里更省事的方法 ② Application里 二、构造方法1. 导入2. 什么是构造方法3. 怎么写构造方法① 无参的构造方法(无参构造器)② 有参的构造方法(有参构造器)③ 注意 4. 构造方法的重载 三、再探this1. 给成员变量用2. 给…...

Fiddler配合wireshark解密ssl

环境&#xff1a; win11&#xff08;wireshark&#xff09;--虚拟机win7&#xff08;Fiddler&#xff09;---虚拟机win7&#xff08;HTTPS站点&#xff09; 软件安装问题&#xff1a; 需要.net环境&#xff0c;NDP461-KB3102436-x86-x64-AllOS-ENU.exe。 安装fiddler后安装下…...

【UI】将 naive ui 的 message 封装进axios 中,关于naiveui的message相关的用法

文章目录 前言在setup外进行使用直接包裹使用vue 单文件中使用 参考文章&#xff1a; 关于naiveui的message相关的用法 前言 最近新建了一个vite vu3 的项目&#xff0c;完全是从0 到1 &#xff0c;封装到request 的时候 想对axios 请求做一个全局的处理&#xff0c;但发现…...

IC卡批量加密快速写入

我们常用的非接触式IC卡&#xff0c;简称M1卡&#xff0c;他有16个扇区&#xff0c;每个扇区有A密码和B密码 对数据的读写是要验证密码的&#xff0c;因此卡片正式使用前&#xff0c;需要把卡片密码改成需要的密码&#xff0c;系统才可以识别 由于一次加密卡片数量比较大&#…...

软件测试学习笔记丨tcpdump 与 wireshark

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32333 一、抓包分析TCP协议 1.1 简介 TCP协议是在传输层中&#xff0c;一种面向连接的、可靠的、基于字节流的传输层通信协议。 1.2 环境准备 对接口测试工具进行分类&#xff1a; 网络嗅…...

Redis:分布式 - 哨兵

Redis&#xff1a;分布式 - 哨兵 概念哨兵 Docker 搭建哨兵分布式选举流程 概念 Redis 的主从复制模式下&#xff0c;一旦主节点由于故障不能提供服务&#xff0c;需要人工进行主从切换&#xff0c;同时大量的客户端需要被通知切换到新的主节点上&#xff0c;对于上了一定规模…...

开源城市运动预约的工具类小程序源码

运动场馆预约小程序是一款主要针对城市运动预约的工具类程序&#xff0c; 产品主要服务人群为20-45岁运动爱好者&#xff0c; 程序前后端完整代码&#xff0c;包括场馆动态&#xff0c;运动常识&#xff0c;羽毛球场地预约&#xff0c;足球场地预约&#xff0c;篮球场地预约&a…...

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸&#xff08;DrawingDoc&#xff09;中的位置时&#xff0c;就是算不对&#xff0c;明明就4、5行代码&#xff0c;怎么看都是很“哇塞”的&#xff0c;毫无问题的。 但结果就是不对。 那就调试一下吧&#xff0c;调试后发现生成的矩阵很不对劲&#…...

2024十月超全大模型常见面试题(附答案)

大模型相关的面试问题通常涉及模型的原理、应用、优化以及面试者对于该领域的理解和经验。以下是一些常见的大模型面试问题以及建议的回答方式&#xff1a; 请简述什么是大模型&#xff0c;以及它与传统模型的主要区别是什么&#xff1f; 回答&#xff1a;大模型通常指的是参…...

Java 的数据结构整理(整合版)

Java 的数据结构整理&#xff08;整合版&#xff09; 一、数据输入输出 https://www.runoob.com/java/java-scanner-class.html 这部分是为了预防 leetcode 刷习惯了&#xff0c;忘记怎么处理输入输出的问题 数据输入 Java的数据输入和 C 相比非常繁琐&#xff0c;因此大多…...

如何让信息学奥赛学习“边玩边学”?——趣味编程让枯燥学习变得有趣

信息学奥赛&#xff08;NOI&#xff09;作为一项高水平的编程竞赛&#xff0c;内容涉及到大量的算法、数据结构和复杂的逻辑思维&#xff0c;对学生的要求非常高。然而&#xff0c;面对枯燥的知识点和高难度的题目&#xff0c;很多学生在备赛过程中容易感到乏味甚至放弃。那么&…...

【艾思科蓝】C++游戏开发探秘:打造高性能游戏世界的钥匙

【IEEE出版 | 院士、Fellow报告】第八届电气、机械与计算机工程国际学术会议&#xff08;ICEMCE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 引言 在当今的游戏开发领域&#xff0c;C以其高效、…...

企业如何做好数据安全防泄密?10个你不知道的防泄密措施

随着数字化转型的加速推进&#xff0c;企业在处理和存储大量数据时&#xff0c;数据泄密风险也显著增加。从客户资料到商业机密&#xff0c;敏感数据一旦泄露&#xff0c;可能对企业造成不可估量的损失。为了更好地应对这一挑战&#xff0c;企业需要采取全面的防泄密策略。以下…...

MySQL基本操作(1)

初始数据库 数据库的基本概念 数据库是一个按照数据结构来组织、存储和管理数据的仓库&#xff0c;换句话说&#xff0c;就是存储数据的仓库。 为何使用数据库&#xff1f;使用数据库不仅仅为了使数据持久化&#xff0c;还能使得数据能够进行有效的管理&#xff0c;以…...

Python 如何使用 Redis 作为缓存

Python 如何使用 Redis 作为缓存 一、引言 在现代 Web 应用程序和数据密集型服务中&#xff0c;性能 和 响应速度 是至关重要的因素。而当应用需要频繁访问相同的数据时&#xff0c;直接从数据库获取数据会耗费大量的时间和资源。因此&#xff0c;缓存系统成为了提升性能的重…...

Python知识点:基于Python工具,如何使用Mediapipe进行人体姿态估计

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 基于Python的Mediapipe人体姿态估计技术详解 在计算机视觉领域&#xff0c;人体…...

数据结构进阶:二叉搜索树_C++

目录 前言&#xff1a; 一、二叉搜索树 1.1二叉搜索树概念 2.2 二叉搜索树操作 1. 二叉搜索树的插入 1.1、插入过程 1.2、代码实现 2、二叉树的删除 2.1、结点删除情况 2.2、替换删除法 1、替换思路 2、代码实现&#xff1a; 3、二叉搜索树的查找 3.1、查找规则 …...

uni-app之旅-day04-商品列表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言6. 商品列表6.0 创建 goodslist 分支6.1 定义请求参数对象6.2 获取商品列表数据6.3 渲染商品列表结构6.4 把商品 item 项封装为自定义组件在 goods_detail 组件…...

单元测试的定义

概念 单元测试是对软件中的最小可测试单元进行检查和验证的过程。在面向对象编程中&#xff0c;最小可测试单元通常是一个方法或者一个类。它的目的是隔离各个部分的代码&#xff0c;确保每个单元都能按预期工作&#xff0c;从而提高软件的质量和可维护性。重要性 发现早期错误…...

C语言从头学66—学习头文件 <stdio.h>(二)

关于可变参数&#xff0c;我们曾经在《C语言从头学27》中接触过&#xff0c;下面学习能够接收可变参数作为 参数的几个函数。 一、printf函数的能够接收可变参数的变体函数&#xff1a; 1、函数vprintf() 功能&#xff1a;按照给定格式&#xff0c;将可变参数中的内容输…...