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

文章目录

  • 285. 为什么需要继承
  • 286. 继承原理图
  • 287. 继承快速入门
  • 288. 289. 290. 291. 292. 继承使用细节1,2,3,4,5
    • 288.1 继承给编程带来的便利
    • 288.2 继承的深入讨论/细节问题
  • 293. 继承本质详解
  • 294. 继承课堂练习1
  • 295. 继承课堂练习2
  • 296. 继承课堂练习3

285. 为什么需要继承

286. 继承原理图

继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来声明继承父类即可。画出继承的示意图。

  • 继承的基本语法

287. 继承快速入门

写一个Student基类,让小学生类Pupil类和大学生类Graduate类继承Student基类。
Student.java

package com.Marisa.extend_;public class Student {//共有属性public String name;public int age;private double score;//成绩//共有的方法public void setScore(double score) {this.score = score;}public void showInfo() {System.out.println("学生名 " + name + " 年龄 " + age + " 成绩 " + score);}
}

Pubil.java

package com.Marisa.extend_;public class Pupil extends Student{public void testing() {System.out.println("小学生 " + name + " 正在考小学数学..");}
}

Graduate.java

package com.Marisa.extend_;public class Graduate extends Student{public void testing() {//和 Pupil 不一样System.out.println("大学生 " + name + " 正在考大学数学..");}
}

Extends01.java

package com.Marisa.extend_;public class Extends01 {public static void main(String[] args) {Pupil pupil = new Pupil();pupil.name = "田所浩二";pupil.age = 24;pupil.testing();pupil.setScore(50);pupil.showInfo();System.out.println("=======");Graduate graduate = new Graduate();graduate.name = "德川";graduate.age = 23;graduate.testing();graduate.setScore(80);graduate.showInfo();}
}

运行结果:
小学生 田所浩二 正在考小学数学…
学生名 田所浩二 年龄 24 成绩 50.0
=======
大学生 德川 正在考大学数学…
学生名 德川 年龄 23 成绩 80.0

288. 289. 290. 291. 292. 继承使用细节1,2,3,4,5

288.1 继承给编程带来的便利

  1. 代码的复用性提高了
  2. 代码的扩展性和维护性提高了

288.2 继承的深入讨论/细节问题

  1. 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问

  2. 子类必须调用父类的构造器, 完成父类的初始化




    在子类无参构造器中隐藏了一句话super();

  3. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过(怎么理解。) [举例说明]


在父类里写一个有参构造器,并注释无参构造器:

因为没用super去指定父类构造器,子类的构造器报错:

用super方法指定了父类构造器:

  1. 如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
    在父类中有三个参数不同的构造器:

    在子类的构造器中指定父类的构造器:

    【注】调用父类的无参构造器(如果有),可以不写super()

  2. super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)
    如果不放在第一行,报错:

  3. super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
    本意是先执行父类构造器,再执行子类的构造器,但是这是不允许的。(this()也只能放在构造器里,且为第一句)

  4. java 所有类都是 Object 类的子类, Object 是所有类的基类.

  5. 父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类)

  6. 子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制

思考:如何让 A 类继承 B 类和 C 类? 【A 继承 B, B 继承 C】
10) 不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系

293. 继承本质详解



JVM将类信息加载到方法区

294. 继承课堂练习1


输出
a
b name
b
原因:创建B类对象,先执行的是B类的无参构造器,在B类的无参构造器中用this调用了有参构造器,然后B类继承于A类,A类是基类,而且有参构造器没用super()且A类有默认无参构造器,所以调用B类的有参构造器的时候,会先调用A类的无参构造器,输出a,然后再输出b name,这时候B类的有参构造器this执行后,继续执行B类无参构造器的剩下的语句b

295. 继承课堂练习2


和上一个题目类似,答案是
我是A类
hahah 我是B类的有参构造器
我是C类的有参构造器
我是C类的无参构造器

296. 继承课堂练习3

编写 Computer 类,包含 CPU、内存、硬盘等属性,getDetails 方法用于返回 Computer 的详细信息
编写 PC 子类,继承 Computer 类,添加特有属性【品牌 brand】
编写 NotePad 子类,继承 Computer 类,添加特有属性【color】
编写 Test 类,在 main 方法中创建 PC 和 NotePad 对象,分别给对象中特有的属性赋值,以及从 Computer 类继承的属性赋值,并使用方法并打印输出信息
Computer.java

package com.Marisa.exercise;public class Computer {private String cpu;// CPUprivate int memory;//内存容量private int disk;//硬盘容量public Computer(String cpu, int memory, int disk) {this.cpu = cpu;this.memory = memory;this.disk = disk;}public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}public int getMemory() {return memory;}public void setMemory(int memory) {this.memory = memory;}public int getDisk() {return disk;}public void setDisk(int disk) {this.disk = disk;}//返回Computer信息public String getDetails(){return "CPU=" + cpu + "\nmemory=" + memory + "\ndisk=" + disk;}
}

PC.java

package com.Marisa.exercise;public class PC extends Computer{private String brand;public PC(String cpu, int memory, int disk, String brand) {super(cpu, memory, disk);this.brand = brand;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public void printInfo(){//调用父类getDetails方法System.out.println("PC信息如下:");System.out.println(getDetails());System.out.println("Brand=" + brand);System.out.println();}
}

NotePad.java

package com.Marisa.exercise;public class NotePad extends Computer{String color;public NotePad(String cpu, int memory, int disk, String color) {super(cpu, memory, disk);this.color = color;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public void printInfo(){System.out.println("NotePad信息如下:");//调用父类getDetails方法System.out.println(getDetails());System.out.println("Color=" + color);System.out.println();}
}

Test.java

package com.Marisa.exercise;public class Test {public static void main(String[] args) {PC pc = new PC("Intel Core i9 12900KF", 64, 1024, "ROG");pc.printInfo();NotePad notePad = new NotePad("高通8Gen2", 12, 512, "黑色");notePad.printInfo();}
}

运行结果:
PC信息如下:
CPU=Intel Core i9 12900KF
memory=64
disk=1024
Brand=ROG

NotePad信息如下:
CPU=高通8Gen2
memory=12
disk=512
Color=黑色

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

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

相关文章

【微服务】服务注册与发现、分布式配置管理 - Consul(day5)

概述 作用 Consul的两大作用就是服务发现和注册与分布式配置管理。 服务发现在介绍Eureka组件的时候已经进行过详细概述,大概就是将硬编码到服务中的IP地址和端口号进行解耦,从而实现动态扩缩容、容错处理、服务管理等功能,通过服务注册和…

台球助教预约小程序源码开发:技术解析与示例代码

随着数字化时代的到来,信息技术与体育运动的融合日益紧密。台球作为一项深受大众喜爱的运动,其教学训练领域也迎来了技术创新的浪潮。本文将探讨台球助教预约小程序的开发过程,从技术选型、功能设计到示例代码展示renxb001,全面解…

yub‘s Algorithmic Adventures_Day7

环形链表 link:https://leetcode.cn/problems/linked-list-cycle-ii/description/ 思路分析 我只能说双指针yyds【刻板hh】 我们分两种情况来分析 起码在第二圈才会相遇 fast比slow多走环的整数倍 fast 走的步数是 slow 步数的 2 倍,即 f2s&#xff…

计算机网络:计算机网络体系结构 —— 专用术语总结

文章目录 专用术语实体协议服务服务访问点 SAP 服务原语 SP 协议数据单元 PDU服务数据单元 SDU 专用术语 实体 实体是指任何可以发送或接收信息的硬件或软件进程 对等实体是指通信双方处于相同层次中的实体,如通信双方应用层的浏览器进程和 Web 服务器进程。 协…

Kubernetes中部署ELK Stack日志收集平台

1 、ELK概念 ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中: Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elas…

单目3d重建DUSt3R 笔记

目录 DUSt3R 三维重建 报错RecursionError: maximum recursion depth exceeded in comparison 报错 numpy.core.multiarray failed to import 报错Numpy is not available 解决 升级版mast3r 速度变慢 修改了参数设置脚本: 测试效果 操作技巧 DUSt3R 三维重…

重学SpringBoot3-集成Redis(九)之共享Session

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(九)之共享Session 1. 为什么需要 Session 共享2. Spring Session 和 Redis 的集成2.1. 引入依赖2.2. 配置 Redis 连接…

基于单片机的智能浇花系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采样DHT11温湿度传感器检测温湿度,通过LCD1602显示 4*4按键矩阵可以设置温度湿度阈值,温度大于阈值则开启水泵,湿度大于阈值则开启风扇…

INS淡绿色风格人像街拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 INS 淡绿色风格人像街拍通过 Lightroom 调色可以营造出清新、自然、时尚的视觉效果。这种风格以淡绿色为主色调,给人一种宁静、舒适的感觉。 预设信息 调色风格:INS风格预设适合类型:人像,街拍,自拍&#…

第三方软件测评机构简析:软件安全测试报告的内容和作用

随着数字化时代的到来,软件的安全性显得尤为重要。尤其在信息安全事件频发的今天,软件安全测试报告成为企业和开发者关注的焦点。软件安全测试报告是评估软件系统安全性的一种综合性文档,通常在软件开发生命周期中进行安全性测试后生成。 软…

UE4 材质学习笔记03(翻书(Flipbook)动画/环境混合)

一.FlipBook Animation 如果你想让游戏以每秒30帧的速度运行,所有内容都必须在33毫秒内渲染出来, 如果你想让游戏以每秒60帧的速度运行的话,必须在16毫秒内。 所以当一个效果需要很多细节的时候,往往会离线创建它,然…

关于PPT生成的开源大模型总结

目前需要开源的PPT生成模型,在这里对github上的一些模型进行筛选 搜索关键词:ppt generate(more starts) williamfzc/chat-gpt-ppt: 支持直接生成PPT支持中英文需要调用ChatGPT(Add your token (official openai api k…

Perforce演讲回顾(上):从UE项目Project Titan,看Helix Core在大型游戏开发中的版本控制与集成使用策略

日前,Perforce携手合作伙伴龙智一同亮相Unreal Fest 2024上海站,分享Helix Core版本控制系统及其协作套件的强大功能与最新动态,助力游戏创意产业加速前行。 Perforce解决方案工程师Kory Luo在活动主会场,带来《Perforce Helix C…

dfs 判重Sequence one——hdu 2610

目录 前言 搜索算法判重 map判重 set判重 Sequence one 问题描述 输入 输出 数据范围 样例 问题分析 重构dfs参数 递减,不重复 去重的优化 最终代码 前言 搜索算法判重 搜索算法判重有很多种方法,常见的有两种,map判重和set判重…

linux安装mysql显示公钥尚未安装 :mysql-community-libs-8.0.39-1.el7.x86_64.rpm 的公钥尚未安装

linux安装mysql显示公钥尚未安装 mysql-community-libs-8.0.39-1.el7.x86_64.rpm 的公钥尚未安装 如题,当执行 yum install -y mysql-community-server 报错 解决办法 命令行执行 yum install -y mysql-community-server --nogpgcheck 也就是在原来的命令后面…

Pikachu-url重定向-不安全的url跳转

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题。 url跳转比较直接的危害是: …

120页满分PPT | 企业级业务架构和IT架构规划方案

方案内容综述 方案涵盖了从战略分析到具体实施路径的内容。提出了IT架构规划的工作思路,包括项目启动、部门访谈、资料收集、内部数据库搜索与先进实践研究等步骤,旨在通过这些步骤完成现状及差距分析,并基于此设计未来的应用架构、数据架构…

【java】final关键字详解

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

路由:ReactRouter

概述 一个路径path对应一个组件component 当我们在浏览器中访问一个path的时候,path对应的组件会在页面中进行渲染。 使用 快速开始 安装依赖 npm i react-router-dom基本使用 import { createBrowserRouter, RouterProvider } from react-router-domconst ro…

《Linux从小白到高手》理论篇:一文概览常用Linux重要配置文件

List item 今天继续宅家,闲来无事接着写。本篇是《Linux从小白到高手》理论篇的最后一篇了。本篇集中介绍所有常用的Linux重要配置文件。 用这个命令可以查看配置文件所在的位置:如上图 locate "*.conf" "*.ini" "*.cfg&quo…