Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)
目录
第1关:封装、继承和多态进阶(一)
报错总结 & 注意事项:
第2关:封装、继承和多态进阶(二)
源码:
报错总结 & 注意事项:
思维导图免费制作网站: 功能强大
学习方法:头歌中左侧知识点的解释还有右侧代码的提示模块非常清晰,我们可以:
①观察代码整体模块②尝试写代码③不清楚知识点,再将左侧解析放在实例当中去看 [那些注释都给我们写好了,对应注释去敲代码]
如果我们实在啥也不会,参考他人代码,那么也不要全部照抄
【例如】抄完有参构造实例化对象Dog后,自己去敲Cat
第1关:封装、继承和多态进阶(一)

package case1;import java.util.Scanner;public class Task1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String dogName = sc.next();String dogSex = sc.next();String dogColor = sc.next();String catName = sc.next();String catSex = sc.next();double catWeight = sc.nextDouble();/********* begin *********/Dog dog = new Dog(dogName,dogSex,dogColor); // 通过有参构造函数实例化Dog类对象dogdog.talk(); // dog调用talk()方法dog.eat(); // dog调用eat()方法/********* end *********//********* begin *********/Cat cat = new Cat(catName,catSex,catWeight);// 通过有参构造函数实例化Cat类对象catcat.talk();// cat调用talk()方法cat.eat(); // cat调用eat()方法/********* end *********/}
}abstract class Pet {/********* begin *********/String name;// 构造函数初始化name和sexString sex;Pet(){} // 定义抽象类Pet,作为基类Pet(String name,String sex){ //类中定义2个this.name = name;//封装属性namethis.sex = sex;//封装属性sex}public abstract void talk(); // 声明抽象方法talk()public abstract void eat(); // 声明抽象方法eat()/********* end *********/
}class Dog extends Pet { // Dog类继承自Pet类/********* begin *********/String color;//封装属性colorpublic Dog(String name,String sex,String color){this.name = name; // 构造函数初始化name、sex和colorthis.sex = sex;this.color = color;}public void talk(){ // 实现自己的talk()方法和eat()方法System.out.println("名称:" +name+ ",性别:" +sex+ ",颜色:" +color+ ",汪汪叫");} // talk()输出'名称:name,性别:sex,颜色:color,汪汪叫'public void eat(){ // eat()输出'name吃骨头'System.out.println(name+ "吃骨头!");}/********* end *********/
}class Cat extends Pet { // Cat类继承自Pet类 /********* begin *********/double weight; Cat(String name,String sex,double weight){this.name = name; // 构造函数初始化name、sex和weightthis.sex = sex;this.weight = weight; //封装属性weight}// 实现自己的talk()方法和eat()方法public void talk(){System.out.println("名称:" +name+ ",性别:" +sex+ ",体重:" +weight+ "kg,喵喵叫");// talk()输出}public void eat(){System.out.println(name+ "吃鱼!"); // eat()输出}/********* end *********/
}
报错总结 & 注意事项:
1. 最头疼的一个问题,没有代码,题目本身这里显示有问题。代码部分明明正确啊!
2. 此处的new 后面应该是Dog类
Dog dog = new Dog(dogName,dogSex,dogColor);3.此处后面无标点符号
Pet(){}4. 抽象方法声明:
1.public(公有的):可以被该类的和非该类的任何成员访问。
2.private(私有的):仅仅可以被该类的成员访问,任何非该类的成员一概不能访问。(主要是隐藏数据来保证数据的安全性)
3.protected(保护的):仅仅可以被子类和类本身还有同一个包里的类访问public abstract void talk();自动默认public类型,代码中所有的public都可以省去不写
第2关:封装、继承和多态进阶(二)

源码:
package case2;import java.util.Scanner;public class Task2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String cName = sc.next();String cSex = sc.next();int cAge = sc.nextInt();String eName = sc.next();String eSex = sc.next();int eAge = sc.nextInt();// 创建测试类对象testPerson test;// 创建Person类对象person1,引用指向中国人,通过有参构造函数实例化中国人类对象Person person1 = new Chinese(cName,cSex, cAge);showEat(person1);// 通过showEat()方法调用Chinese的eat()方法//showEat(new Chinese(cName,cSex,cAge));// 创建Person类对象person2,引用指向英国人,通过有参构造函数实例化英国人类对象Person person2 = new English(eName,eSex,eAge);showEat(person2);// 通过showEat()方法调用English的eat()方法// 强制类型转换(向下转型) 调用Chinese类特有的方法shadowBoxing()/********* begin *********/Chinese d = (Chinese)person1;d.shadowBoxing();/********* end *********/// 强制类型转换(向下转型) 调用English类特有的方法horseRiding()/********* begin *********/English e = (English)person2;e.horseRiding();/********* end *********/}/********* begin *********/public static void showEat(Person p){// 定义showEat方法,使用父类作为方法的形参,实现多态p.eat();//传入的是哪个具体对象就调用哪个对象的eat()方法}/********* end *********/
}abstract class Person {// 抽象类Person 封装属性name、sex和age/********* begin *********/public String name; // 构造函数初始化name、sex和agepublic String sex;public int age;abstract void eat();// 声明抽象方法eat()/********* end *********/
}class Chinese extends Person { // Chinese类继承自Person类/********* begin *********/public String name; // 构造函数初始化name、sex和agepublic String sex;public int age;Chinese(String name,String sex,int age){this.name = name;this.sex = sex;this.age = age;}void eat(){// 重写父类方法eat()System.out.println("姓名:" +name+ ",性别:" +sex+ ",年龄:" +age+ ",我是中国人,我喜欢吃饭!");}void shadowBoxing(){// 定义子类特有方法,当父类引用指向子类对象时无法调用该方法 输出System.out.println(name+"在练习太极拳!");}/********* end *********/
}class English extends Person { // English类继承自Person类/********* begin *********/String name;// 构造函数初始化name、sex和ageString sex;int age;English(String name,String sex,int age){this.name = name;this.sex = sex;this.age = age;}void eat(){// 重写父类方法eat() 输出System.out.println("姓名:" +name+ ",性别:" +sex+ ",年龄:" +age+ ",我是英国人,我喜欢吃三明治!");}void horseRiding(){System.out.println(name+ "在练习骑马!");// 定义子类特有方法,当父类引用指向子类对象时无法调用该方法 输出}/********* end *********/
}
报错总结 & 注意事项:
1.看见题目注释位置是单引号,一开始打了单引号
单引号:引的数据 是char类型的 单引号只能引一个字符(表示单个字符)
双引号:双引号引的数据 是String类型的 而双引号可以引0个及其以上(引用字符串)
报错原因:定义的String类型
System.out.println(name+"在练习太极拳!");2. 最容易漏掉“ ; ”
Java当中有分号,Python因为简单没有分号!
思维导图免费制作网站: 功能强大
https://www.processon.com/diagrams
https://www.processon.com/diagrams
相关文章:
Java面向对象 - 封装、继承和多态的综合练习(答案+知识点总结)第1关:封装、继承和多态进阶(一)+ 第2关:封装、继承和多态进阶(二)
目录 第1关:封装、继承和多态进阶(一) 报错总结 & 注意事项: 第2关:封装、继承和多态进阶(二) 源码: 报错总结 & 注意事项: 思维导图免费制作网站…...
小迪安全day20WEB漏洞-文件上传之基础及过滤方式
小迪安全day20WEB漏洞-文件上传之基础及过滤方式 什么是文件上传漏洞 有文件上传就可以测试是否有漏洞,关键看代码是否完备。 服务端代码未对客户端上传的文件进行严格的验证和过滤 漏洞危害 自定义网站后门,获取网站权限,属于高危漏洞。 上…...
LeetCode236.最近的公共祖先
求解最近公共祖先的算法 分为两个步骤: 求出两节点路径取两路径上最后一个相同的节点(该节点即为p,q节点的最近公共祖先) 节点路径的算法设计与实现 求节点路径即输入二叉树根节点与待求节点返回根节点到该节点路径上的所有节…...
【springcloud 微服务】Spring Cloud Alibaba整合Sentinel详解
目录 一、前言 二、环境准备 2.1 部署sentinel管控台 2.1.1 官网下载sentinel的jar包 2.1.2 启动控制台 2.1.3 访问控制台 2.2 整合springcloud-alibaba 2.2.1 引入相关依赖 2.2.2 修改配置文件 2.2.3 增加一个测试接口 2.2.4 接口测试 三、sentinel 流控规则使用 …...
ASP医院管理系统—病历管理系统的设计与实现
病历管理系统是医院管理系统的重要组成,该系统的开发主要包括后台数据库的建立以及前台应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库,而对于后者则要求具有齐全完善的应用程序功能,友好人性化的操作界面。该系统采用现代的办公自动化…...
【蓝桥杯】动态规划(dp)入门!| 入门动态规划的正确方式! ——学习笔记
目录 最暴力的dfs --> 记忆化搜索 ---> 递推(dp) 记忆化搜索 暴力dfs 记录答案 递推的公式 dfs 向下递归的公式 递推数组的初始值 递归的边界 动态规划(dp)入门 | 这tm才是入门动态规划的正确方式! | dfs记忆化搜索 | 全体起立!!_哔哩哔哩_bilibili 大佬教学视频…...
元宇宙与网络安全
元宇宙是一种虚拟现实空间,用户可以在计算机生成的环境中进行互动。元宇宙的应用范围很广,比如房地产,医疗,教育,军事,游戏等等。它提供了更具沉浸感的体验,更好地现实生活整合,以及…...
Pod控制器之hpa
简述 HPA全称HorizontalPodAutoscaler Pod水平自动扩缩容,Kubernetes控制器HPA是一种用于自动调整Pod数量的控制器。它可以根据资源使用情况自动增加或减少Pod的数量,以确保应用程序的高可用性和性能。HPA可以根据CPU使用率或自定义指标来进行调整&…...
发现一个白嫖GPT4.0的方法!真的是完胜3.5!
大家好,我是五竹。 先说个基本的科普,最近被问的人都嘛了。 1、ChatGPT账号只有两种:普通账号和plus账号。 2、普通账号升级到plus账号,需要绑定国外的支付方式,每个月大概130左右!plus账号更稳!更快&am…...
数据结构之第四章、ArrayList和顺序表
一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是…...
webase全家桶搭建教程过程记录+bug解决
前置条件 Ubuntu20 基础环境搭建 检查Java java -version 检查mysql(Ubuntu部署MySQL) mysql --version 在装MySQL的时候发现了一个问题 就是不管怎么sudo mysql_secure_installation,,第二步设置密码就是不对,解…...
openEuler Linux 部署 HadoopHA
openEuler Linux 部署 HadoopHA 升级操作系统和软件 yum -y update升级后建议重启 安装常用软件 yum -y install gcc gcc-c autoconf automake cmake make rsync vim man zip unzip net-tools zlib zlib-devel openssl openssl-devel pcre-devel tcpdump lrzsz tar wget修改…...
React-Hooks----useEffect()
文章目录前言用法前言 useEffect() 是 React 中最常用的 Hook 之一,它可以让函数组件拥有类似于类组件中 componentDidMount、componentDidUpdate 和 componentWillUnmount 生命周期函数的功能。 用法 useEffect() 接受两个参数 第一个参数是一个函数,…...
JavaWeb基础-汇总
SSM框架课程汇总01-MySQL基础02-MySQL高级03-JDBC04-JDBC练习05-Maven&Mybatis基础06-Mybatis练习07-JavaScript08-Web概述09-HTTP10-Tomcat11-Servlet12-Request&Response13-用户注册登录案例14-JSP15-JSP案例16-会话技术17-用户登录注册案例18-Filter19-Listener&…...
Niuke:JZ36.二叉树与双向链表
文章目录Niuke:JZ36.二叉树与双向链表题目描述示例思路分析代码实现Niuke:JZ36.二叉树与双向链表 题目描述 描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 注意: 1.要求不能创建任何新的结点,只…...
javaScript---读懂promise、async/await
一、Promise Promise 是一个 Es 6 提供的类,目的是更加优雅地书写复杂的异步任务。可以解决嵌套式的回调地域问题,Promise 将嵌套格式的代码变成了顺序格式的代码。 //回调地域 setTimeout(function () {console.log("红灯");setTimeout(function () {console.lo…...
【Linux】TCP编程流程
TCP编程流程 socket()创建套接字,套接字TCP协议选择流式服务SOCK_STREAM。 bind()指定套接字使用的IP地址和端口。IP地址是自己主机地址,端口为一个16位的整形值。 listen()方法创建监听队列。监听队列分为存放未完成三次握手的连接和完成三次握手的连…...
SuperMap iDesktop 下载安装,生成本地瓦片,以及发布本地瓦片服务
SuperMap iDesktop 是插件式桌面GIS软件,提供基础版、标准版、专业版和高级版四个版本,具备二三维一体化的数据处理、制图、分析、海图、二三维标绘等功能,支持对在线地图服务的无缝访问及云端资源的协同共享,可用于空间数据的生产…...
【ONE·Data || 常见排序说明】
总言 数据结构基础:排序相关内容。 文章目录总言1、基本介绍2、插入排序2.1、直接插入排序:InsertSort2.1.1、单趟2.1.2、总趟2.2、希尔排序(缩小增量排序):ShellSort2.2.1、预排序1.0:单组分别排序2.…...
本节作业之跟随鼠标的天使、模拟京东按键输入内容、模拟京东快递单号查询
本节作业之跟随鼠标的天使、模拟京东按键输入内容、模拟京东快递单号查询1 跟随鼠标的天使2 模拟京东按键输入内容3 模拟京东快递单号查询1 跟随鼠标的天使 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><met…...
Phi-3 Forest Laboratory 入门到精通:GitHub开源项目协作全流程指南
Phi-3 Forest Laboratory 入门到精通:GitHub开源项目协作全流程指南 你是不是也遇到过这种情况:自己写的代码跑得好好的,一跟别人合作就乱套了。版本冲突、代码覆盖、提交信息写得像天书……明明是个简单的功能开发,最后花在沟通…...
Cogito-v1-preview-llama-3B效果展示:STEM题目分步推导+代码生成真实截图
Cogito-v1-preview-llama-3B效果展示:STEM题目分步推导代码生成真实截图 1. 模型能力概览 Cogito v1 预览版是Deep Cogito推出的混合推理模型系列,在大多数标准基准测试中均超越了同等规模下最优的开源模型。这个3B参数的模型在编码、STEM题目解答、指…...
人工智能|大模型 —— 量化 —— 一文搞懂大模型量化技术:GGUF、GPTQ、AWQ
目前关于大模型量化技术的文章层出不穷,但对其理论部分的深入探讨却相对较少。本文将对大模型量化技术进行系统性的介绍,并重点聚焦于理论层面的深入解析。 一、大模型量化基础 大模型量化的核心在于将模型参数的精度从较高的位宽(bit-width…...
STM32duino S2-LP无线驱动库:Sub-1GHz低功耗可靠通信实现
1. 项目概述STM32duino X-NUCLEO-S2868A2 是一款面向 STM32 平台的 Arduino 兼容库,专为驱动意法半导体(STMicroelectronics)推出的 X-NUCLEO-S2868A2 扩展板而设计。该扩展板核心搭载 S2-LP 超低功耗 Sub-1GHz 射频收发器芯片(型…...
Python自动化办公:3种PDF水印处理技巧(附完整代码)
Python自动化办公:3种PDF水印处理技巧(附完整代码) 在数字化办公场景中,PDF文档的水印处理已成为高频需求。无论是合同归档需要添加版权标识,还是内部文件流转需清除敏感标记,传统手动操作既耗时又易出错。…...
C# : 引用类型都存在堆上吗
不完全是,这里要精确区分:引用类型的实例大多数存在堆上,但引用本身不一定在堆上。我们拆开来说:引用类型本身 vs 引用变量对象实例(类的实例)绝大多数情况下分配在 堆上由 垃圾回收器 管理生命周期引用变量…...
技术指标——格雷厄姆指数
文章目录1. 格雷厄姆指数是什么?2. 格雷厄姆指数的作用是什么?3. 举例计算例1:牛市顶部(2021年2月)例2:熊市底部(2024年2月)例3:中性水平(假设某一般时刻&…...
Go语言的context.WithCancel取消信号传播与资源清理在分布式系统中的协调
Go语言的context.WithCancel取消信号传播与资源清理在分布式系统中的协调 在分布式系统中,任务的取消与资源清理是确保系统稳定性和高效性的关键挑战。Go语言通过context包提供了优雅的解决方案,尤其是context.WithCancel机制,能够实现跨组件…...
WiFi热图绘制工具:用Python为你的无线网络做一次“CT扫描“ [特殊字符][特殊字符]
WiFi热图绘制工具:用Python为你的无线网络做一次"CT扫描" 🏥📶 【免费下载链接】wifi-heat-mapper whm also known as wifi-heat-mapper is a Python library for benchmarking Wi-Fi networks and gather useful metrics that can…...
Anthropic 经济指数报告:学习曲线
引言 Anthropic 经济指数利用隐私保护数据分析系统,追踪 Claude 在整个经济领域中的应用情况。这是Anthropic 努力的一部分,旨在尽早理解 AI 对经济的影响,以便研究人员和政策制定者有充足的时间做好准备。 在最新一期的报告中,首先观察到了与先前报告相比使用情况的变化…...

