继承与多态1

11.2(Person. Student. Employee、Faculty和Staff类)设计一个名为Person的类

和它的两个名
为Student和Employee子类。Employee类又有子类:教员类Faculty和职员类Staff,每个人都有姓名、地址、电话号码和电子邮件地址。学生有班级状态(大一,大二、大三或大四)。将这些状态定义为常量。一个雇员有办公室、工资和受聘日期。定义一个名为MyDate的类,包含数据域: year (年)、month(月)和day(日)。教员有办公时间和级别。职员有职务称号。覆盖每个类中的toString方法,显示相应的类名和人名。
画出这些类的UML图。实现这些类。编写一个测试程序,创建Person.Student, Employee, Faculty和Staff,并且调用它们的to8tring()方法。

package six;
import java.util.Scanner;
class MyDate{
private int year;
private int month;
private int day;
public MyDate(int year,int month,int day) {
this.year=year;
this.month=month;
this.day=day;
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
}
class Person{
protected String name;
protected String address;
protected String phoneNumber;
protected String email;
public Person(String name,String address,String phoneNumber,String email) {
this.name=name;
this.address=address;
this.phoneNumber=phoneNumber;
this.email=email;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getEmail() {
return email;
}
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
class Student extends Person {
private String status;
public static final String FRESHMAN = "大一";
public static final String SOPHOMORE = "大二";
public static final String JUNIOR = "大三";
public static final String SENIOR = "大四";public Student(String name, String address, String phoneNumber, String email, String status) {
super(name, address, phoneNumber, email);
this.status = status;
}public String getStatus() {
return status;
}
public String toString() {
return "Student{" +
"name='" + super.getName() + '\'' +
", status='" + status + '\'' +
'}';
}
}
class Employee extends Person {
private String office;
private double salary;
private MyDate hireDate;public Employee(String name, String address, String phoneNumber, String email, String office, double salary, MyDate hireDate) {
super(name, address, phoneNumber, email);
this.office = office;
this.salary = salary;
this.hireDate = hireDate;
}public String getOffice() {
return office;
}public double getSalary() {
return salary;
}public MyDate getHireDate() {
return hireDate;
}
public String toString() {
return "Employee{" +
"name='" + super.getName() + '\'' +
", office='" + office + '\'' +
", salary=" + salary +
", hireDate=" + hireDate +
'}';
}
}
class Faculty extends Employee {
private String officeHours;
private String rank;public Faculty(String name, String address, String phoneNumber, String email, String office, double salary, MyDate hireDate, String officeHours, String rank) {
super(name, address, phoneNumber, email, office, salary, hireDate);
this.officeHours = officeHours;
this.rank = rank;
}public String getOfficeHours() {
return officeHours;
}public String getRank() {
return rank;
}
public String toString() {
return "Faculty{" +
"name='" + super.getName() + '\'' +
", officeHours='" + officeHours + '\'' +
", rank='" + rank + '\'' +
'}';
}
}class Staff extends Employee {
private String title;public Staff(String name, String address, String phoneNumber, String email, String office, double salary, MyDate hireDate, String title) {
super(name, address, phoneNumber, email, office, salary, hireDate);
this.title = title;
}public String getTitle() {
return title;
}
public String toString() {
return "Staff{" +
"name='" + super.getName() + '\'' +
", title='" + title + '\'' +
'}';
}
}
public class ren {public static void main(String[] args) {
Person person = new Person("张三", "地址 1", "123456789", "zhangsan@example.com");
Student student = new Student("李四", "地址 2", "987654321", "lisi@example.com", Student.SOPHOMORE);
Employee employee = new Employee("王五", "地址 3", "567891234", "wangwu@example.com", "办公室 1", 5000, new MyDate(2020, 5, 1));
Faculty faculty = new Faculty("赵六", "地址 4", "432198765", "zhaoliu@example.com", "办公室 2", 6000, new MyDate(2018, 3, 15), "9:00-17:00", "教授");
Staff staff = new Staff("钱七", "地址 5", "765432198", "qianqi@example.com", "办公室 3", 4500, new MyDate(2019, 7, 1), "经理");
System.out.println(person);
System.out.println(student);
System.out.println(employee);
System.out.println(faculty);
System.out.println(staff);
}
}

 2.3(梁耀忠英文第11版P536:*13.6)(比较圈类)创建名为ComparableCircle的类,

该类扩展Circle并实现Comparable。绘制UML图,实现基于面积的比较圆的compareTo方法。编写一个测试类来查找ComparableCircle对象的两个实例中较大的一个。(不要求画出UML图)

package six;
import java.util.*;
class Circle{
private double radius;
public Circle() {
this.radius=1.0;
}
public Circle(double radius) {
this.radius=radius;
}
public double getArea() {
return Math.PI*radius*radius;
}
}
class ComparableCircle extends Circle{
public ComparableCircle(double radius) {
super(radius);
}
public int compareTo(ComparableCircle other) {
if(this.getArea()>other.getArea()) {
return 1;
} else if(this.getArea()<other.getArea()) {
return -1;
} else{
return 0;
}
}
}
public class bijiao {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double radius1,radius2;
radius1=scanner.nextDouble();
radius2=scanner.nextDouble();
ComparableCircle circle1 = new ComparableCircle(radius1);
ComparableCircle circle2 = new ComparableCircle(radius2);
int r=circle1.compareTo(circle2);
if(r>0) {
System.out.println("circle1面积更大");
}
else if(r==0) {
System.out.println("两个圆面积一样大");
}
else {
System.out.println("circle2面积更大");
}
}
}

2.4(梁耀忠英文第11版P536:*13.9)(授权圈可比)
重写清单14.2中的Circle类以扩展GeometricObject并实现Comparable接口。重写Object类中的equals方法。如果两个Circle对象的半径相同,则它们相等。绘制包含圆、几何对象和可比较对象的UML图。(不要求画出UML图)

package six;
import java.util.Scanner;
public class bijiao2 {
public static void main(String[] args) {
interface Comparable{
int equal(Circle circle);
}
abstract class GeometricObject{
private String color = "white";
private boolean filled;
private java.util.Date dateCreated;public GeometricObject() {
dateCreated = new java.util.Date();
}public GeometricObject(String color, boolean filled) {
dateCreated = new java.util.Date();
this.color = color;
this.filled = filled;
}public String getColor() {
return color;
}public void setColor(String color) {
this.color = color;
}public boolean isFilled() {
return filled;
}public void setFilled(boolean filled) {
this.filled = filled;
}public java.util.Date getDateCreated() {
return dateCreated;
}public String toString() {
return "color: " + color + " and filled: " + filled;
}
abstract double getArea();
abstract double getPerimeter();
}class Circle extends GeometricObject
implements Comparable{
public double radius;
public Circle(double radius){
this.radius=radius;
}
public double getRadius() {
return radius;
}
public int equal(Circle other) {
if(this.getRadius()>other.getRadius()) {
return 1;
} else if(this.getRadius()<other.getRadius()) {
return -1;
} else{
return 0;
}
}
public int equal(six.Circle circle) {
return 0;
}
}
Scanner scanner=new Scanner(System.in);
double radius1;
double radius2;
radius1=scanner.nextDouble();
radius2=scanner.nextDouble();
Circle circle1 = new Circle(radius1);
Circle circle2 = new Circle(radius2);
int r=circle1.equal(circle2);
if(r>0) {
System.out.println("circle1面积更大");
}
else if(r==0) {
System.out.println("两个圆面积一样大");
}
else {
System.out.println("circle2面积更大");
}
}
}

三和四就是一个有接口一个没接口的写法

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

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

相关文章

java后端框架-MyBatis

一、概述 1、起源 MyBatis本是Apache下的开源项目&#xff0c;名为iBatis,2010年转投谷歌,从iBatis3.x开始更名为MyBatis 2、优点 (1)优秀的数据持久层框架&#xff08;对jdbc做了轻量级封装&#xff09; 3、特点 (1)对jdbc中接口进行封装的同时还提供了一些自己的类实现…

计算机字符编码的发展

目录 背景 发展 第一阶段&#xff1a;ASCII编码 第二阶段&#xff1a;扩展ASCII编码 第三阶段&#xff1a;各国编码 第四阶段&#xff1a;Unicode编码 第五阶段&#xff1a;UTF系列编码方式 相关扩展 背景 在计算机诞生初期&#xff0c;所有的数据都是基于二进制数&am…

samba_ubuntu_share_vmbox_vmware

_____ Ubuntu 利用 samba 与 win 直接共享文件夹 _____ samba Samba - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) 用于 win 和 unix 直接访问资源 samba 为选定的 unix 目录建立网络共享&#xff0c; 使得 win 用户可以像访问普通 win 下的文件夹那样来通过网络来…

npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本

安装npm时出现如下提示&#xff1a; 出现这个错误信息&#xff0c;是系统禁止执行PowerShell的脚本。 出现的原因是&#xff0c;系统默认的执行策略是Restricted&#xff08;默认设置&#xff09;&#xff0c;限制执行&#xff0c;所以会出现如上提示。 解决方法&#xff1a;…

Linux服务器配置ssh证书登录

1、ssh证书登录介绍 Linux服务器ssh登录有密码登录和证书登录两种。如果使用密码登录&#xff0c;容易遭受密码泄露或者暴力破解&#xff0c;我们可以使用ssh证书登录并禁止使用密码登录&#xff0c;ssh证书登录通过公钥和私钥来完成整个连接过程&#xff0c;公钥保存在服务器…

Java中Arrays.toString与new String()字节数组使用的差异

Java 编程语言提供了许多内置方法和类&#xff0c;这使得程序员能够更加方便的处理数据和对象。本文将讨论 Arrays.toString 方法和 new String() 方法在处理字节数组时的不同。 文章目录 Arrays.toString 方法new String() 方法总结 Arrays.toString 方法 Arrays.toString() …

高维数组到向量的转换:两种方法的深度解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;高维数组的挑战与需求 二、方法一&#xff1a;使用NumPy库进行展平 示…

如何将md文件精确的转换成docx文件

如何将md文件转换成docx&#xff1f; 文章目录 如何将md文件转换成docx&#xff1f;一、如何将MD文件比较完美的转换成word呢&#xff1f;二、方法3 步骤1、下载一个可用的MarkDown编辑器2、下载Pandoc安装 三、来进行转化了 一、如何将MD文件比较完美的转换成word呢&#xff1…

从零开始学Vue3--根据目录结构自动生成路由

我们在测试或者小项目中经常遇到一个问题&#xff0c;就是加一个页面&#xff0c;就要在router.js中加一个路由&#xff0c;相当的麻烦&#xff0c;有没有办法可以根据目录结构自动生成路由呢&#xff1f; 想要自动生成路由&#xff0c;最重要的是能够获取指定目录下vue的路径…

开源代码分享(31)-计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

参考文献&#xff1a; [1]孙惠娟,刘昀,彭春华,等.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度[J].电网技术,2021,45(09):3534-3545.DOI:10.13335/j.1000-3673.pst.2020.1720. 1.摘要 为了促进多能源互补及能源低碳化&#xff0c;提出了计及电转气协同的含碳捕集与垃…

canfd与can2.0关系

canfd是can2.0的升级版&#xff0c; 支持canfd的设备就支持can2.0&#xff0c;但can2.0的设备不支持canfd 参考 是选CAN接口卡还是CANFD接口卡_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hh411K7Zn/?spm_id_from333.999.0.0 哪些STM32有CANFD外设 STM32G0, STM…

Python 计算两组点云间的距离

两组点云间距离计算 一、介绍1.1 概念1.2 函数讲解二、代码示例三、结果示例一、介绍 1.1 概念 点云距离计算 :计算从源点云中每个点到目标点云中最近邻点的距离。 1.2 函数讲解 def compute_point_cloud_distance(self, target): # real signature unknown; restored from _…

使用OrangePi KunPeng Pro部署AI模型

目录 一、OrangePi Kunpeng Pro简介二、环境搭建三、模型运行环境搭建(1)下载Ollama用于启动并运行大型语言模型(2)配置ollama系统服务(3)启动ollama服务(4)启动ollama(5)查看ollama运行状态四、模型部署(1)部署1.8b的qwen(2)部署2b的gemma(3)部署3.8的phi3(4)部署4b的qwen(5)部…

工作中有哪些超级好用的C/C++程序库?

视频和讲义发布在这里&#xff1a; B站链接

Android Ktor 网络请求框架

Ktor 是一个由 JetBrains 开发的用于 Kotlin 编程语言的应用框架&#xff0c;旨在创建高性能的异步服务器和客户端应用程序。由于完全基于 Kotlin 语言&#xff0c;Ktor 能够让开发者编写出简洁、可读性强且功能强大的代码&#xff0c;特别适合那些已经熟悉 Kotlin 的开发人员。…

Python算法设计与分析期末

Python算法设计与分析期末通常涉及对算法基础知识的理解和应用&#xff0c;包括但不限于以下几个方面&#xff1a; 算法基础&#xff1a;了解算法的定义、特性&#xff08;确定性、有穷性、可行性等&#xff09;以及算法的分类。 时间复杂度和空间复杂度&#xff1a;学会分析算…

调试记录-U盘枚举失败之LPM影响

现象 板子接部分U盘出现枚举失败&#xff0c;看log像是硬件信号问题&#xff0c;如&#xff1a; [ 29.186464] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.079624] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.080200]…

【高校科研前沿】南科大姜丽光课题组在地球物理学领域TOP期刊Geophys. Res. Lett.发表极端气候频发下水库蓄水状态的相关研究成果

文章简介 论文名称&#xff1a;Reservoir Filling Up Problems in a Changing Climate:Insights From CryoSat‐2 Altimetry 第一作者及单位&#xff1a;汪志伟&#xff08;硕士研究生 南方科技大学环境学院&#xff09; 通讯作者及单位&#xff1a;姜丽光&#xff08;助理教…

JAVA:多线程常见的面试题和答案

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、并发编程三要素&#xff1f; 原 子 性 原子性指的是一个或者多个操作&#xff0c;要么全部执行并且在执行的过程中不被其他操作打断&#xff0c;要么就全部都不执行。可 见 性 可见性指多…

电脑录屏怎么录?7个电脑录屏软件免费版强势来袭,赶快收藏!

电脑录屏怎么录&#xff1f;相信很多小伙伴们都不知道怎么在Windows电脑上录屏吧&#xff1f;在当今社会&#xff0c;随着互联网的快速发展&#xff0c;越来越多的小伙伴们开始通过制作视频内容来分享知识、展示技能或者记录生活。电脑录屏成为了一种简单高效的方式&#xff0c…