Comparable compareTo

这个昵称有点帅 2013-03-18 04:41:30
package list;

import java.util.*;

public class EmployeeSortTest {
public static void main(String[] args) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("Tom", 3500);
staff[1] = new Employee("Jack", 2500);
staff[2] = new Employee("Rose", 5600);

Arrays.sort(staff);

for (Employee e:staff) {
System.out.println("Name = " + e.getName() + " Salary = " + e.getSalary());
}

Manager[] managers = new Manager[4];
managers[0] = new Manager("Lucy", 3500, 1000);
managers[1] = new Manager("Keith", 4000, 2000);
managers[2] = new Manager("Jennifer", 5600, 500);
managers[3] = new Manager("Tony", 5000, 1500);
// 这里想实现按照bonus排序
Arrays.sort(managers);

for (Manager m:managers) {
System.out.println("Name = " + m.getName() + " Salary = " + m.getSalary() + " Bonus = " + m.getBonus());
}
}
}

class Manager extends Employee {
private double bonus;

public Manager(String n, double s, double b) {
super(n, s);
bonus = b;
}

public double getBonus() {
return bonus;
}
// 直接在这里写,不起作用,知道是错的,不知道该咋写
public int compareTo(Manager ma) {
if (bonus < ma.bonus) return -1;
if (bonus > ma.bonus) return 1;
return 0;
}
}

class Employee implements Comparable<Employee> {
private String name;
private double salary;

public Employee(String n, double s) {
name = n;
salary = s;
}

public String getName() {
return name;
}

public double getSalary() {
return salary;
}

public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise;
}
@Override
public int compareTo(Employee em) {
if (salary < em.salary) return -1;
if (salary > em.salary) return 1;
return 0;
}

}


想实现manager的bonus排序,怎么弄?
...全文
165 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 zxd297139205 的回复:
你子类中的compareTo方法不是重写父类的方法(参数类型不同),子类中可以这么写 Java code ? 12345678 @Override public int compareTo(Employee ma) { Manager m=(Manager)ma; if (bonus < m.bonus) return ……
谢谢 Manager m=(Manager)ma;
  • 打赏
  • 举报
回复
引用 1 楼 tlfu_12344 的回复:
是不是父类中的ComparaTo没有被继承,你manager再实现那接口试试
如果加上 implements Comparable<Employee>,也不行,因为Employee中没有bonus, 如果用implements Comparable<Manager>,会报错: The interface Comparable cannot be implemented more than once with different arguments: Comparable<Employee> and Comparable<Manager> 不能有两个不同的参数
花木兰1闪21A 2013-03-18
  • 打赏
  • 举报
回复
嗯,是地,楼上是正解,加@Override
达达KZT 2013-03-18
  • 打赏
  • 举报
回复
zxd297139205 2013-03-18
  • 打赏
  • 举报
回复
你子类中的compareTo方法不是重写父类的方法(参数类型不同),子类中可以这么写

	    @Override
	    public int compareTo(Employee ma) {
	    	Manager m=(Manager)ma;
	        if (bonus < m.bonus) return -1;
	        if (bonus > m.bonus) return 1;
	        return 0;
	    }

花木兰1闪21A 2013-03-18
  • 打赏
  • 举报
回复
是不是父类中的ComparaTo没有被继承,你manager再实现那接口试试

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧