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

本文详细介绍了面向对象设计的基本概念,包括抽象类、继承、封装和多态的运用。通过具体的Person、Student、Company和Employee类的实例,展示了如何在Java中实现这些面向对象特性,同时强调了equals方法的正确实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义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方法重要说明:

1.对Employee的company属性的比较。要考虑传入为null的情况。如果company不为null且传入为null,返回false
2.对所有String字符类型比较时,也要考虑null情况。

提示

1.排序可使用Collections.sort
2.equals方法要考虑周全

main方法说明

1.创建若干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对象。

2。对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable或Comparator

3.接受输入,如果输入为exit则return退出程序,否则继续下面步骤。

4.将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。

5.输出字符串stuList,然后输出stuList中的每个对象。

6.输出字符串empList,然后输出empList中的每个对象。

输入样例:

s zhang 23 false 001 net15
e wang 18 true 3000.51 IBM
s zhang 23 false 001 net15
e bo 25 true 5000.51 IBM
e bo 25 true 5000.52 IBM
e bo 18 true 5000.54 IBM
e tan 25 true 5000.56 IBM
e tan 25 true 5000.51 IBM
s wang 17 false 002 null
s wang 17 false 002 null
e hua 16 false 1000 null
s wang 17 false 002 net16
e hua 16 false 1000 null
e hua 18 false 1234 MicroSoft
!
continue

输出样例:

Employee:bo-18-true-IBM-5000.54
Employee:bo-25-true-IBM-5000.51
Employee:bo-25-true-IBM-5000.52
Employee:hua-16-false-null-1000.0
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56
Employee:tan-25-true-IBM-5000.51
Student:wang-17-false-002-null
Student:wang-17-false-002-null
Student:wang-17-false-002-net16
Employee:wang-18-true-IBM-3000.51
Student:zhang-23-false-001-net15
Student:zhang-23-false-001-net15
stuList
Student:wang-17-false-002-null
Student:wang-17-false-002-net16
Student:zhang-23-false-001-net15
empList
Employee:bo-18-true-IBM-5000.54
Employee:bo-25-true-IBM-5000.51
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56
Employee:tan-25-true-IBM-5000.51
Employee:wang-18-true-IBM-3000.51

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner cin = new Scanner(System.in);
		List<Person> personList = new ArrayList<>(30);
		List<Person> stuList = new ArrayList<>(30);
		List<Person> empList = new ArrayList<>(30);
		String s;
		while(true)
		{
			s = cin.next();
			if(s.equals("s"))
			{
				String name = cin.next();
			    int age = cin.nextInt();
			    boolean gender = cin.nextBoolean();
			    String stuNo = cin.next();
			    String clazz = cin.next();
				//Student peo = new Student(s,name,age,gender,stuNo ,clazz);
				personList.add(new Student(s,name,age,gender,stuNo ,clazz));
			}
			else if(s.equals("e"))
			{
				String nameString = cin.next();
                int age = cin.nextInt();
                boolean gender = cin.nextBoolean();
                double salary = cin.nextDouble();
                String company = cin.next();
                Company company2 = new Company(company);
                if ("null".equals(company)) {
			     	personList.add(new Employee(s,nameString, age, gender, new Company("null"), salary));
			    } else {
			     	personList.add(new Employee(s,nameString, age, gender, new Company(company), salary));
			    }
			}
			else
			{
				break;
			}
		}
				//personList.sort(Comparator.comparing(Person::getName).thenComparingInt(Person::getAge));
			personList.sort((obj1, obj2) -> {
			   	if (obj1.getName().compareTo(obj2.getName()) < 0) {
			    		return -1;
			   	} else if (obj1.getName().compareTo(obj2.getName()) > 0) {
			    		return 1;
			   	} else {
			    		return obj1.getAge() - obj2.getAge();
			  	}
			  });
			for (Person obj : personList) {
			   	System.out.println(obj.toString());
			  }
				  String sExit = "exit";
				  String sReturn = "return";
				  s = cin.next();
				  while(true) {
			    	   if(s.equals("return")||s.equals("exit")) {
			    		   break;
			    	   }else {
			        	   //分组
			               //判断过程要根据equals 是自己定义的 所以比较工资那有坑,用contains是不行的 所以还是循环比较吧
			               boolean flag1=true;
			               boolean flag2=true;
			               for(int i=0;i<personList.size();i++) {
			            	   if(personList.get(i).toString().indexOf("Student")>=0) {
			            		   if(stuList.size()==0) {
			            			   stuList.add(personList.get(i));
			            		   }
			            		   for(int j=0;j<stuList.size();j++) {
			            			   if(personList.get(i).equals(stuList.get(j))){
			            				   flag1=false;
			            			   }
			            		   }
			            		   if(flag1) {
			            			   stuList.add(personList.get(i));
			            			   
			            		   }
			            		   flag1=true;
			            	   }else {
			            		   if(empList.size()==0) {
			            			   empList.add(personList.get(i));
			            		   }
			            		   for(int j=0;j<empList.size();j++) {
			            			   if(personList.get(i).equals(empList.get(j))){
			            				   flag2=false;
			            			   }
			            		   }
			            		   if(flag2) {
			            			   empList.add(personList.get(i));
			            		   }
			            		   flag2=true;
			            	   }
			               }
			               System.out.println("stuList");
			               for(int i=0;i<stuList.size();i++) {
			            	   
			        		   System.out.println(stuList.get(i).toString()); 
			        	  
			               }
			               System.out.println("empList");
			               for(int i=0;i<empList.size();i++) {
			            	   
			        		   System.out.println(empList.get(i).toString()); 
			        	  
			               }
			               break;
			          } 
				  }
	}
}
class Person{
	private String zhiye;
	private String name;
	private int age;
	private boolean gender;
	public Person(String zhiye,String name, int age, boolean gender)
	{
		this.zhiye = zhiye;
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	public String toString()
	{
		return name+"-"+age+"-"+gender;//返回"name-age-gender"格式的字符串
	}
	public boolean equals(Object obj)
	{
		Person p = (Person)obj;
		if(this.name.equals(p.name) && this.age==p.age && this.gender == p.gender) return true;
		return false;
		//比较name、age、gender,都相同返回true,否则返回false
	}
	public String getZhiye() {
		return zhiye;
	}
	public void setZhiye(String zhiye) {
		this.zhiye = zhiye;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public boolean isGender() {
		return gender;
	}
	public void setGender(boolean gender) {
		this.gender = gender;
	}
	
}
class Student extends Person{
	private String stuNo;
	private String clazz;
	public Student(String zhiye,String name, int age, boolean gender, String stuNo, String clazz)
	{
		super(zhiye,name, age, gender);
		this.stuNo = stuNo;
        this.clazz = clazz;
	}
	@Override
	public String toString() {
		// TODO 自动生成的方法存根
		return "Student:"+super.toString()+"-"+stuNo+"-"+clazz;
	}
	@Override
	public boolean equals(Object obj) {
		// TODO 自动生成的方法存根
		Student st = (Student) obj;
		if(super.equals(st)) {
			if(this.stuNo.equals(st.stuNo) && this.clazz.equals(st.clazz)) return true;
		}
		return false;
	}
}
class Company{
	String name;
	public Company(String name)
	{
		this.name = name;
	}
	public String toString()
	{
		return name;//直接返回name
	}
	public boolean equals(Object obj)
	{
		Company com = (Company)obj;
		if(this.name.equals(com.name)) return true;//name相同返回true
		return false;
	}
}
class Employee extends Person{
	Company company;
	double salary;
	public Employee(String zhiye,String name, int age, boolean gender, Company company, double salary)
	{
		super(zhiye,name, age, gender);
		this.company =company;
		this.salary = salary;
	}
	public String toString()
	{
		return "Employee:"+super.toString()+"-"+company.toString()+"-"+salary;//返回"Employee:person的toString-company-salary"格式的字符串
	}
	public boolean equals(Object obj)
	{
		if (obj == null) {
	   		return false;
	  	}
		Employee emm = (Employee)obj;
		if(super.equals(emm))
		{
			DecimalFormat p = new DecimalFormat("#.#");//数值按“#.#”格式输出,小数点后保留一位
			return this.company.equals(emm.company) && p.format(this.salary).equals(p.format(emm.salary));
		}
		return false;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay_fearless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值