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

面向对象练习题(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)

目录 第一题 第二题 第三题 第一题 思路分析&#xff1a; 1.Person p new Student();这就是一个向上转型&#xff0c;让父类的引用指向子类的对象&#xff0c;但是向上转型不能访问子类的属性和方法 我们在写代码时看的是编译类型 在运行是看的是运行类型 p.run(); p.eat(); …...

重构类关系-Extract Interface提炼接口八

重构类关系-Extract Interface提炼接口八 1.提炼接口 1.1.使用场景 若干客户使用类接口中的同一子集&#xff0c;或者两个类的接口有部分相同。将相同的子集提炼到一个独立接口中。 类之间彼此互用的方式有若干种。“使用一个类”通常意味用到该类的所有责任区。另一种情况…...

vivo手机各系列简介和拆解

Vivo是中国智能手机制造商&#xff0c;其产品线较多&#xff0c;主要包括以下系列&#xff1a; X系列&#xff1a;X系列是Vivo的高端智能手机系列&#xff0c;注重出色的拍照性能、高质量的音效和高端的设计。该系列主要面向追求高质量拍照和高端体验的用户。 V系列&#xff1…...

Redis:redis通用命令;redis常见数据结构;redis客户端;redis的序列化

一、redis命令 1.redis通用命令 Redis 通用命令是一些 Redis 下可以作用在常用数据结构上的常用命令和一些基础的命令 常见的命令有&#xff1a; keys 查看符合模板的所有key&#xff0c;不建议在生产环境设备上使用&#xff0c;因为keys会模式匹配所有符合条件的key&#…...

Java新特性

switch Java中switch的三种用法方式 JAVA中的switch Java switch 中如何使用枚举&#xff1f; 注解 天天用注解你真的知道怎么用吗&#xff1f;Java中的注解及其实现原理。 JAVA注解 JAVA注解 基础 集合判空 求和 Java8之List求和 JAVA中对list使用stream对某个字段求和…...

Java_Spring:8. Spring 中 AOP 的细节

目录 1 说明 2 AOP 相关术语 3 学习 spring 中的 AOP 要明确的事 4 关于代理的选择 1 说明 spring 的 aop通过配置的方式&#xff0c;实现上一章节的功能。 2 AOP 相关术语 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring …...

uni-app--》uni-app的生命周期讲解

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…...

fastp软件介绍

fastp软件介绍1、软件介绍2、重要参数解析2.1 全部参数2.2 使用示例2.3 重要参数详解&#xff08;1&#xff09;UMI去除&#xff08;2&#xff09;质量过滤&#xff08;3&#xff09;长度过滤&#xff08;4&#xff09;低复杂度过滤&#xff08;5&#xff09;adapter过滤&#…...

C++继承相关总结

文章目录前言1.继承的相关概念1.继承概念2.继承的相关语法3.基类和派生类对象赋值转换(赋值兼容规则&#xff09;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&#xff08;1&#xff09;配置文件&#xff08;2&#xff09;实体类&#xff08;3&#xff09;Mapper&#xff08;4&#xff09;mybatis-config.xml2.TKMybatis&#xff08;1&#xff09;配置文件&#xff08;2&#xff09;实体类&#xff08;3&#xff09;M…...

37了解高可用技术方案,如冗余、容灾

高可用性技术方案是指在系统设计和架构中采用一系列措施来确保系统在遇到各种故障和问题时仍能保持持续的可用性&#xff0c;避免因单点故障而导致系统宕机、数据丢失等问题。其中包括冗余和容灾技术。 冗余技术&#xff1a; 冗余技术是指通过增加系统组件的冗余来提高系统可靠…...

jdb调试问题集锦

https://bbs.kanxue.com/thread-210049.htm蓝铁 1 2017-8-25 19:40 4 楼 0 根据提示&#xff0c;可知&#xff0c;出错的地方是&#xff0c;android.app.ActivityThread.handleBindApplication(), 行4,400 查看源码可以发现&#xff0c;代码中指向的是app.onCreate() …...

要和文心一言来一把你画我猜吗?

想和文心一言来一把你画我猜吗&#xff1f; ChatGPT的爆火&#xff0c;让AI对话模型再次走入大众视野。大家在感叹ChatGPT的智能程度时&#xff0c;总会忍不住想&#xff1a;如果我们也有自己的AI对话模型就好了。在社会的压力下&#xff0c;国内的厂商和研究机构也纷纷做出尝试…...

delete[] p->elems和free(p->elems)有什么区别?

delete[]和free()都是释放内存的函数&#xff0c;但它们具有不同的使用方法和适用情况。 delete[] 通常用于释放C中动态分配的数组空间。在使用new[]运算符分配内存时&#xff0c;应使用delete[]运算符来释放分配的内存。delete[] 运算符会调用每个数组元素的析构函数&#xf…...

CAS问题

CAS&#x1f50e;什么是CAS&#x1f50e;伪代码解析&#x1f50e;CAS是如何实现原子性的&#x1f50e;CAS的应用&#x1f33b;实现原子类&#x1f33b;实现自旋锁&#x1f50e;ABA问题&#x1f33b;ABA问题可能引起的BUG&#x1f33b;ABA问题的解决方案&#x1f50e;结尾&#…...

网络编程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 格式支持以下数据类型&#xff1a; 类型描述数字型&#xff08;Number&#xff09;JavaScript 中的双精度浮点型格式字符串型&#xff08;String&#xff09;双引号包裹的 Unicode 字符和反斜杠转义字符布尔型&#xff08;Boolean&#xff09;true 或 fal…...

Python函数简介

Python是一种高级编程语言&#xff0c;它的函数是其中一个非常重要的特性。在程序中&#xff0c;函数是一段被命名的代码块&#xff0c;它可以接受输入并且返回输出。本篇文章将介绍Python函数的基本概念、定义、调用和参数。 基本概念 在Python中&#xff0c;函数是由def关键…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...