7-8 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company(带个人意见代码解释)

题目内容:
定义Person抽象类,Student类、Company类,Employee类。

Person类的属性:String name, int age, boolean gender
Person类的方法:
public Person(String name, int age, boolean gender);
public String toString(); //返回"name-age-gender"格式的字符串
public boolean equals(Object obj);//比较name、age、gender,都相同返回true,否则返回false

Student类继承自Person,属性:String stuNo, String clazz
Student类的方法:
//建议使用super复用Person类的相关有参构造函数
public Student(String name, int age, boolean gender, String stuNo, String clazz);
public String toString(); //返回 “Student:person的toString-stuNo-clazz”格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true,则继续比较stuNo与clazz。

Company类属性:String name
Company类方法:
public Company(String name);
public String toString(); //直接返回name
public boolean equals(Object obj);//name相同返回true

Employee类继承自Person,属性:Company company, double salary
Employee类方法:
//建议使用super复用Person类的相关有参构造函数
public Employee(String name, int age, boolean gender, double salary, Company company);
public String toString(); //返回"Employee:person的toString-company-salary"格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true。再比较company与salary。
//比较salary属性时,使用DecimalFormat df = new DecimalFormat("#.#");保留1位小数

编写equals方法重要说明:
对Employee的company属性的比较。要考虑传入为null的情况。如果company不为null且传入为null,返回false
对所有String字符类型比较时,也要考虑null情况。
提示:
排序可使用Collections.sort
equals方法要考虑周全

main方法说明
创建若干Student对象、Employee对象。
输入s,然后依次输入name age gender stuNo clazz创建Student对象。
输入e,然后依次输入name age gender salary company创建Employee对象。
然后将创建好的对象放入List personList。输入其他字符,则结束创建。
创建说明:对于String类型,如果为null则不创建对象,而赋值为null。对于company属性,如果为null则赋值为null,否则创建相应的Company对象。
对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable或Comparator
接受输入,如果输入为exit则return退出程序,否则继续下面步骤。
将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。
输出字符串stuList,然后输出stuList中的每个对象。
输出字符串empList,然后输出empList中的每个对象。

import java.util.*;
import java.text.DecimalFormat;//用最快的速度将数字格式化为需要的样子,题目要求(#.#)->86h
class Person {private String name;private int age;private boolean gender;//构造函数Person Person(String name,int age,boolean gender) {this.name = name;this.age = age;this.gender = gender;}//定义返回字符串的格式,返回"name-age-gender"格式的字符串public String toString() {return this.name + "-" + age + "-" + gender;}/* 比较name,age,genderinstanceof判断obj是否为Person类实例,名字是否相同,年龄是否相等及gender是否相等String比较用__.equals(__),数值用== (Person)obj类型强制转换*/ public boolean equals(Object obj) {if (obj instanceof Person) {return this.name.equals(((Person) obj).name) && this.age == ((Person) obj).age && this.gender == ((Person) obj).gender;} else {return false;}}//获取name和ageString getString() {return this.name;} int getAge() {return this.age;}
}
//Student继承Person
class Student extends Person {private String stuNo, clazz;//构造函数Student Student(String name, int age, boolean gender, String stuNo, String clazz) {super(name, age, gender);this.stuNo = stuNo;this.clazz = clazz;}//定义返回字符串的格式,返回 “Student:person的toString-stuNo-clazz”格式的字符串public String toString() {return "Student:" + super.toString() + "-" + stuNo + "-" + clazz;}/* 先调用父类Person的equals方法->super.equals(obj),再继续比较stuNo和clazzinstanceof判断obj是否为Student类实例,stuNo是否相同,clazz是否相同String比较用__.equals(__);Student)obj类型强制转换*/public boolean equals(Object obj) {if (obj instanceof Student) {return super.equals(obj) && this.stuNo.equals(((Student) obj).stuNo) && this.clazz.equals(((Student) obj).clazz);} else {return false;}}
}
class Company {private String name; //构造函数Company Company(String name) {this.name = name;} //定义返回字符串格式,直接返回namepublic String toString() {return name;} /* 比较nameinstanceof判断obj是否为Company类实例,名字是否相同String比较用__.equals(__)(Company)obj类型强制转换*/public boolean equals(Object obj) {if (obj instanceof Company) {return ((Company) obj).name.equals(this.name);} else {return false;}}
}
//Employee继承Person
class Employee extends Person { private Company company;private double salary;//构造函数Employee Employee(String name, int age, boolean gender, Company company, double salary) {super(name, age, gender);this.salary = salary;this.company = company;}//定义返回字符串格式,返回"Employee:person的toString-company-salary"格式的字符串public String toString() {return "Employee:" + super.toString() + "-" + company.toString() + "-" + salary;}/* 首先调用父类的equals方法->super.equals((Employee)obj),如果相等返回true,再比较company与salary。instanceof判断obj是否为Employee类实例,stuNo是否相同,clazz是否相同String比较用__.equals(__);(Employee)obj类型强制转换*  */public boolean equals(Object obj) {//对Employee的company属性的比较,要考虑传入为null的情况。如果company不为null但obj传入为null,返回falseif (obj == null) {return false;}if (obj instanceof Employee) {Employee t = (Employee) obj;if (super.equals(obj)) {DecimalFormat p = new DecimalFormat("#.#");//数值按“#.#”格式输出,小数点后保留一位return t.company.equals(company) && p.format(t.salary).equals(p.format(salary));}return false;} else {return false;}}
}
public class pta7_80306{ public static void main(String[] args) {Scanner sc = new Scanner(System.in);  List<Person> personList = new ArrayList<>(20);//定义动态列表personList,列表类型为Person,列表大小20String m;while (sc.hasNext()) {m = sc.next();int age;boolean gender;String name;/* 创建若干Student对象和Employee对象,输入除s和e之外符号退出创建personList.add()将创建好的对象放入personList */if ("s".equals(m)) {name = sc.next();age = sc.nextInt();gender = sc.nextBoolean();String stuNo = sc.next();String clazz = sc.next();personList.add(new Student(name, age, gender, stuNo, clazz));} else if ("e".equals(m)) {name = sc.next();age = sc.nextInt();gender = sc.nextBoolean();double salary = sc.nextDouble();String company = sc.next();/* 对于String类型,如果为null则不创建对象,而赋值为null对于company属性,如果为null则赋值为null,否则创建相应的Company对象。 */if ("null".equals(company)) {personList.add(new Employee(name, age, gender, new Company("null"), salary));} else {personList.add(new Employee(name, age, gender, new Company(company), salary));}} else {break;}}/* 对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序对于obj1.compareTo.obj2方法,obj>obj2,>0;obj1<obj2,<0*/  personList.sort((obj1, obj2) -> {if (obj1.getString().compareTo(obj2.getString()) < 0) {return -1;} else if (obj1.getString().compareTo(obj2.getString()) > 0) {return 1;} else {return obj1.getAge() - obj2.getAge();}});//输出排好后的personListfor (Person obj : personList) {System.out.println(obj.toString());}String sExit = "exit";String sReturn = "return";m = sc.next();/* 如果输入为exit则return退出程序,否则继续下面步骤将personList中的元素按照类型分别放到stuList与empList */if ((!sExit.equals(m) && !sReturn.equals(m))) {List<Student> stuList = new ArrayList<>(20);List<Employee> empList = new ArrayList<>(20);for (Person now : personList) {if (now instanceof Student) {if (!stuList.contains(now)) {stuList.add((Student) now);}}if (now instanceof Employee) {if (!empList.contains(now)) {empList.add((Employee) now);}}}/* 如果输入为exit则return退出程序,否则继续下面步骤将personList中的元素按照类型分别放到stuList与empList */if ((!sExit.equals(m) && !sReturn.equals(m))) {List<Student> stuList = new ArrayList<>(20);List<Employee> empList = new ArrayList<>(20);for (Person now : personList) {if (now instanceof Student) {if (!stuList.contains(now)) {stuList.add((Student) now);}}if (now instanceof Employee) {if (!empList.contains(now)) {empList.add((Employee) now);}}}}}
}

写在最后的话:很久以前写的作业了,运行结果随缘,忘记代码是否原创,但代码解释肯定原创,因为仅是个人拙见,有不同意见也欢迎评论。

7-8 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company相关推荐

  1. 4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company**

    4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person.Student.Employee.Company 题目概况: 定义Person抽象类,Student类.Company类, ...

  2. java之面向对象:继承extends、super、覆盖override的用法

    继承的好处: 1 )提高了代码的复用性. 2 )让类与类之间产生了关系,给第三个特征多态提供 了前提. java支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有 ...

  3. java继承stu继承person_4.3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (20 分)中的一些问题...

    1.Employee类的equals 由于题目要求//首先调用父类的equals方法,如果返回true.再比较company与salary. //比较salary属性时,使用DecimalFormat ...

  4. 7-2 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (15分)

    定义Person抽象类,Student类.Company类,Employee类. Person类的属性:String name, int age, boolean gender Person类的方法: ...

  5. 7-6 jmu-Java-03面向对象-06-继承覆盖综合练习

    写之前还是要先明确好程序编写的要求,以免过了样例但代码运行逻辑和要求不符合. 记录一个比较浮点型数据的方法 String df1 = new DecimalFormat("#.#" ...

  6. Java(10)面向对象之继承,内部类

    01 面向对象之继承 public class Inheritance02 {public class Person {/*** 昵称*/private String nickname;/*** 性别 ...

  7. 【JavaSE学习】03面向对象Java语法

    JavaSE(B站黑马)学习笔记 01Java入门 02数组.方法 03面向对象&Java语法 04-1Java高级(Stream流.异常处理.日志技术) 04-2Java高级(文件处理-IO ...

  8. java用继承编写宠物乐园_MoreThanJavaDay 5:面向对象进阶继承详解

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  9. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  10. Java面向对象(继承、抽象类)

    面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...

最新文章

  1. 还在用if(obj!=null)做非空判断?带你快速上手Optional实战性理解!
  2. 上班请病假还得看AI脸色,10秒钟判别真假,打工人太难了
  3. Web页面获取用户控件页面中服务器控件的值
  4. .Net程序猿玩转Android开发---(11)页面跳转
  5. git clone权限被拒绝
  6. java找链表中最小值_算法图解:如何找出栈中的最小值?
  7. 南农计算机分数线,2021南京农业大学录取分数线_历年各专业分数线(2017-2020),各省投档线_一品高考网...
  8. 【RPA】PDF生成器FPDF(Python篇)
  9. DirectInput手柄在Windows环境下震动实现
  10. [机器学习]给机器学习面试者的十项建议
  11. vue+element实现手机号验证码注册
  12. python爬楼梯问题_使用python算法解决楼梯台阶问题方法详解
  13. 捷径晚年生活/养老方式大全110+城市旅居场景
  14. 乘幂法求主特征值和特征向量(C++)
  15. Week2-09-Rabbit 类数组实现具体方法
  16. 前端网页版ps,你用过了吗?
  17. iPhone 12易掉漆、边框太锋利还割手?库克快出来对线......
  18. 通过爬虫获取银行名称
  19. U盘无法格式化(提示U盘文件系统变为了RAW格式)【一般应用】
  20. 【Microsoft Office Document Imaging 2007】提取图片中的文字

热门文章

  1. [USACO 2008 MAR] 土地购买
  2. 企业估值研究到底从何处着手?
  3. 杭州电子科技大学考研计算机科学与技术,杭州电子科技大学考研好考吗
  4. 【毫米波雷达】LFMCW测距/测速原理
  5. 2022年全球市场GPS追踪装置总体规模、主要生产商、主要地区、产品和应用细分研究报告
  6. 微信app支付php案例分析,PHP实现APP微信支付的实例讲解
  7. win无线网卡怎么进入监听模式_win10系统卸载网卡驱动的操作方法
  8. http://hi.baidu.com/%BE%C5%CC%EC%C4%A7%CA%DE/blog/item/9b3263626a75ff49ebf8f808.html
  9. Vcenter7部署3par ssmc
  10. 恢复未保存的word