面向对象练习题(8)
目录
第一题
第二题
第三题
第一题
思路分析:
1.Person p = new Student();这就是一个向上转型,让父类的引用指向子类的对象,但是向上转型不能访问子类的属性和方法 我们在写代码时看的是编译类型 在运行是看的是运行类型
p.run();
p.eat();
所有只能访问父类的两个方法
2.向下转型只能强转父类的引用,不能强转父类的对象
如果写成Student s = (Student) Person就会报错
应该写成Student s = (Student) p
向下转型语法
子类类型 引用名 =(子类类型)父类引用; 注意是父类的引用
向下转型后可以访问子类的属性和方法
Student s = (Student) p;//向下转型
因为父类有和子类相同的方法所以只能调用其中之一 具体调用那个根据情况而定
属性没有重写之说,属性的值看编译类型 方法看运行类型
package idea.homework.homework11;public class homework11 {public static void main(String[] args) {//person person = new Person();Person p = new Student();//向上转型 让父类的引用指向子类的对象 不能访问子类的属性和方法//在写代码时看的是编译类型 在运行是看的是运行类型p.run();p.eat();//2)只能强转父类的引用,不能强转父类的对象 如果写成Student s = (Student) Person就会报错//应该写成Student s = (Student) p//向下转型语法 子类类型 引用名 =(子类类型)父类引用; 注意是父类的引用//向下转型后可以访问子类的属性和方法//Student s = (Student) p;//向下转型//因为父类有和子类相同的方法所以只能调用其中之一 具体调用那个根据情况而定//属性没有重写之说,属性的值看编译类型 方法看运行类型s.run();s.eat();s.study();}
}class Person {public void run() {System.out.println("person run");}public void eat() {System.out.println("person eat");}
}class Student extends Person {public void run() {System.out.println("student run");}public void study() {System.out.println("student study..");}
}
第二题
思路分析:
说出==和equals的区别
==是比较运算符 ==左右两边是基本数据类型时判断的是两个值是否相同 左右两边是引用类型时默认判断的时地址是否相同
equals方法
在没有重写equals方法时 默认调用object的equals方法判断的时地址是否相同 重写了equals方法后,判断的是两个对象的内容是否相同 equals不能用于基本数据类型 Java所有的类都可以使用equals
package idea.homework.homework12;public class homework12 {public static void main(String[] args) {//12.说出==和equals的区别/*==是比较运算符==左右两边是基本数据类型时判断的是两个值是否相同左右两边是引用类型时默认判断的时地址是否相同equals方法在没有重写equals方法时 默认调用object的equals方法判断的时地址是否相同重写了equals方法后,判断的是两个对象的内容是否相同equals不能用于基本数据类型Java所有的类都可以使用equals*/}
}
第三题
思路分析:
1.我们要发现,一开始我们在定义学生类和老师类的时候,这两个类中我们都有name age 等属性,所有我们把该属性抽出来,做成一个Person类,这个我们子类子需要继承父类就可以了
2.创建一个Person数组,因为Students和Teacher都继承了Person了所有,可以存放到Person数组中,使用冒泡排序,按照年龄进行排序,注意在比较的时候,比较的是年龄,但是在交换的时候,交换的可不是年龄,因此在定义辅助变量的时候,需要定义一个Person类型的
homework13类
package idea.homework.homework13;public class homework13 {public static void main(String[] args) {/*
(1)做一个Student类,Student类有名称(name),性别(sex),年龄
(age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。
(2)写一个Teacher类,Teacher类有名称(name),性别(sex),年年龄:30 龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将性别:男 4个属性赋值。
(3)抽取一个父类Person类,将共同属性和方法放到Person类
(4)学生需要有学习的方法(study),在方法里写生“我承诺,我会好王飞爱玩象棋 好学习。 。
(5)教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学(6)学生和教师都有玩的方法(play),学生玩的是足球,老师玩的是象棋,此方法是返回字符串的,分别返回“xx爱玩足球”和“xx爱玩象棋”(其中xx分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以 要求此方法定义在父类中,子类实现重写。(7)定义多态数组,里面保存2个学生和2个教师,要求按年龄从高到低排序,
(8)定义方法,形参为Person类型,功能:调用学生的study或教师的teach方法*///创建了一个Person数组,也就是多态数组,该数组可以存放Student 和 Teacher Person[] p = new Person[4];//为数组进行初始化p[0] = new Student("jack", '男', 2);p[1] = new Student("tom", '男', 1);p[2] = new Teacher("many", '男', 3);p[3] = new Teacher("smith", '男', 4);//使用冒泡排序,按照年龄进行排序,注意在比较的时候,比较的是年龄,但是在交换的时候,交换的可不是年龄,因此在定义辅助变量的时候,需要定义一个Person类型的for (int i = 0; i < p.length - 1; i++) {for (int j = 0; j < p.length - 1 - i; j++) {if (p[j].getAge() > p[j + 1].getAge()) {Person tmp = p[j];p[j] = p[j + 1];p[j + 1] = tmp;}}}//遍历数组for (int i = 0; i < p.length; i++) {//在输出p[i]的时候等价于p[i].toString()System.out.println(p[i]);}System.out.println();//遍历数组for (int i = 0; i < p.length; i++) {//对数组中的元素进行比较,如果运行类型是Student那么就调用student中的方法if (p[i] instanceof Student){((Student) p[i]).study();//对数组中的元素进行比较,如果运行类型是teacher那么就调用teacher中的方法}else if (p[i] instanceof Teacher){((Teacher)p[i]).teach();}else {System.out.println("不做处理");}}}}
Person类
package idea.homework.homework13;/*** Person类——父类*/
public class Person {//因为两个子类中,都有name age 等属性,那么我们把共同的部分给提取出来,做成一个父类private String name;private char sex;private int age;public Person(String name, char sex, int age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// (6)学生和教师都有玩的方法(play),学生玩的是足球,老师玩的是象棋,此方法是返回字符串的,分别返回“xx爱玩足球”和“xx爱玩象棋”
// (其中xx分别代表学生和老师的姓名)。因为玩的方法名称都一样,所以 要求此方法定义在父类中,子类实现重写。//这是父类特有的方法public String play() {return this.name + "爱玩";}//重新写toString方法是为了方便对象的输出@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", sex=" + sex +", age=" + age +'}';}
}
Student类
package idea.homework.homework13;public class Student extends Person{
// (1)做一个Student类,Student类有名称(name),性别(sex),年龄
// (age),学号(stu_id),做合理封装,通过构造器在创建对象时将4个属性赋值。private String stu_id;public Student(String name, char sex, int age) {super(name, sex, age);}public String getStu_id() {return stu_id;}public void setStu_id(String stu_id) {this.stu_id = stu_id;}//(4)学生需要有学习的方法(study),在方法里写生“我承诺,我会好王飞爱玩象棋 好学习。 。public void study(){System.out.println(super.getName()+"我会好好学习");}@Overridepublic String play() {return "象棋";}
}
Teacher类
package idea.homework.homework13;public class Teacher extends Person {//(2)写一个Teacher类,Teacher类有名称(name),性别(sex),年年龄:30 龄(age),工龄(work_age),做合理封装,通过构造器在创建对象时将性别:男 4个属性赋值。private int work_age;public Teacher(String name, char sex, int age) {super(name, sex, age);}public int getWork_age() {return work_age;}public void setWork_age(int work_age) {this.work_age = work_age;}//(5)教师需要有教学的方法(teach),在方法里写上“我承诺,我会认真教学public void teach() {System.out.println(super.getName() + "我承若我会认真教学");}@Overridepublic String play() {return "足球";}
}
相关文章:
面向对象练习题(8)
目录 第一题 第二题 第三题 第一题 思路分析: 1.Person p new Student();这就是一个向上转型,让父类的引用指向子类的对象,但是向上转型不能访问子类的属性和方法 我们在写代码时看的是编译类型 在运行是看的是运行类型 p.run(); p.eat(); …...
重构类关系-Extract Interface提炼接口八
重构类关系-Extract Interface提炼接口八 1.提炼接口 1.1.使用场景 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同。将相同的子集提炼到一个独立接口中。 类之间彼此互用的方式有若干种。“使用一个类”通常意味用到该类的所有责任区。另一种情况…...
vivo手机各系列简介和拆解
Vivo是中国智能手机制造商,其产品线较多,主要包括以下系列: X系列:X系列是Vivo的高端智能手机系列,注重出色的拍照性能、高质量的音效和高端的设计。该系列主要面向追求高质量拍照和高端体验的用户。 V系列࿱…...
Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化
一、redis命令 1.redis通用命令 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令 常见的命令有: keys 查看符合模板的所有key,不建议在生产环境设备上使用,因为keys会模式匹配所有符合条件的key&#…...
Java新特性
switch Java中switch的三种用法方式 JAVA中的switch Java switch 中如何使用枚举? 注解 天天用注解你真的知道怎么用吗?Java中的注解及其实现原理。 JAVA注解 JAVA注解 基础 集合判空 求和 Java8之List求和 JAVA中对list使用stream对某个字段求和…...
Java_Spring:8. Spring 中 AOP 的细节
目录 1 说明 2 AOP 相关术语 3 学习 spring 中的 AOP 要明确的事 4 关于代理的选择 1 说明 spring 的 aop通过配置的方式,实现上一章节的功能。 2 AOP 相关术语 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring …...
uni-app--》uni-app的生命周期讲解
🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败…...
fastp软件介绍
fastp软件介绍1、软件介绍2、重要参数解析2.1 全部参数2.2 使用示例2.3 重要参数详解(1)UMI去除(2)质量过滤(3)长度过滤(4)低复杂度过滤(5)adapter过滤&#…...
C++继承相关总结
文章目录前言1.继承的相关概念1.继承概念2.继承的相关语法3.基类和派生类对象赋值转换(赋值兼容规则)2.继承中的注意事项1.继承中的作用域2.派生类的默认成员函数1.构造函数与拷贝构造2.赋值重载与析构3.友元关系与静态成员变量3.多继承(菱形继承)1.虚拟继承2.虚拟继…...
【从零开始学习 UVM】8.2、Reporting Infrastructure —— uvm_printer 详解
文章目录 老派风格在UVM中如何完成uvm 风格Table printerTree printerLine printerprint使用print使用条件使用konb更改print配置示例在一个随机验证环境中,数据对象不断地由不同的组件生成和操作,如果能够显示对象的内容,则调试会变得更加容易。 老派风格 传统上,这是通…...
Mybatis、TKMybatis对比
文章目录1.Mybatis(1)配置文件(2)实体类(3)Mapper(4)mybatis-config.xml2.TKMybatis(1)配置文件(2)实体类(3)M…...
37了解高可用技术方案,如冗余、容灾
高可用性技术方案是指在系统设计和架构中采用一系列措施来确保系统在遇到各种故障和问题时仍能保持持续的可用性,避免因单点故障而导致系统宕机、数据丢失等问题。其中包括冗余和容灾技术。 冗余技术: 冗余技术是指通过增加系统组件的冗余来提高系统可靠…...
jdb调试问题集锦
https://bbs.kanxue.com/thread-210049.htm蓝铁 1 2017-8-25 19:40 4 楼 0 根据提示,可知,出错的地方是,android.app.ActivityThread.handleBindApplication(), 行4,400 查看源码可以发现,代码中指向的是app.onCreate() …...
要和文心一言来一把你画我猜吗?
想和文心一言来一把你画我猜吗? ChatGPT的爆火,让AI对话模型再次走入大众视野。大家在感叹ChatGPT的智能程度时,总会忍不住想:如果我们也有自己的AI对话模型就好了。在社会的压力下,国内的厂商和研究机构也纷纷做出尝试…...
delete[] p->elems和free(p->elems)有什么区别?
delete[]和free()都是释放内存的函数,但它们具有不同的使用方法和适用情况。 delete[] 通常用于释放C中动态分配的数组空间。在使用new[]运算符分配内存时,应使用delete[]运算符来释放分配的内存。delete[] 运算符会调用每个数组元素的析构函数…...
CAS问题
CAS🔎什么是CAS🔎伪代码解析🔎CAS是如何实现原子性的🔎CAS的应用🌻实现原子类🌻实现自旋锁🔎ABA问题🌻ABA问题可能引起的BUG🌻ABA问题的解决方案🔎结尾&#…...
网络编程socket(下)
目录 一、TCP网络程序 1.1 服务端初始化 1.1.1 创建套接字 1.1.2 服务端绑定 1.1.3 服务端监听 1.2 服务端启动 1.2.1 服务端获取连接 1.2.2 服务端处理请求 1.3 客户端初始化 1.4 客户端启动 1.4.1 发起连接 1.4.2 发起请求 1.5 网络测试 1.6 单执行流服务端的…...
华为OD机试题【打折买水果】用 C++ 编码,速通
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:打折买水果 题目 有 m m m…...
JSON 数据类型
JSON 数据类型 JSON 格式支持以下数据类型: 类型描述数字型(Number)JavaScript 中的双精度浮点型格式字符串型(String)双引号包裹的 Unicode 字符和反斜杠转义字符布尔型(Boolean)true 或 fal…...
Python函数简介
Python是一种高级编程语言,它的函数是其中一个非常重要的特性。在程序中,函数是一段被命名的代码块,它可以接受输入并且返回输出。本篇文章将介绍Python函数的基本概念、定义、调用和参数。 基本概念 在Python中,函数是由def关键…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
