接口
在Java程序设计语言中,接口不是类,而是对类的一组需求的描述。
实现Commparable接口
Arrays类中的sort()方法承诺可以对对象数组进行排序,但是要求满足一个前提:对象所属的类必须实现了Commparable接口。
下面是Commparable接口接口的实例
public interface Commparable<t>
{
int commpareTo(T other);
}
这就是说,任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。
当然,接口中还有一个没有明确说明的附加要求:再调用x.compareTo(y)时,这个compareTo方法必须明确比较两个对象的内容,并返回比较结果。当x小于y时,返回一个负数,等于时,返回一个0,否则返回一个整数。
下面是一个是实现Comparable接口的程序
package com.bdqn.testInterface;
import java.time.LocalDate;
import java.util.Arrays;
public class Employee implements Comparable<Employee>
{
/**
* 按工资排序
*/
public int compareTo(Employee other)
{
return Double.compare(salary,other.salary);
}
//定义员工的静态域
private static int nextId = 1;
//定义员工姓名
private String name;
//定义工资
private double salary;
//定义雇佣日期
private LocalDate hireDay;
//定义员工的编号
private int id;
public Employee()
{
}
/**
* 定义构造方法(姓名,工资,入职日期,年、月、日)
* @param n
* @param s
* @param year
* @param month
* @param day
*/
public Employee(String n,double s,int year,int month,int day)
{
name = n;
salary = s;
hireDay = LocalDate.of(year,month,day);
id = nextId;
nextId++;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public LocalDate getHireDay()
{
return hireDay;
}
public int getId()
{
return id;
}
/**
* 按百分比提高员工的工资
* @param byPercent
*/
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent/100;
salary += raise;
}
/**
* 比较员工的姓名
* @param other
* @return
*/
public boolean equals(Employee other)
{
return name.equals(other.name);
}
public static void main(String[] args)
{
//创建可以容纳三个员工对象的数组
Employee[] staff = new Employee[3];
//给三个员工类的容器放入对象
staff[0] = new Employee("Steve",75000,1997,8,6);
staff[1] = new Employee("Jum·sfay",65000,1998,6,23);
staff[2] = new Employee("Kennedy",18990,2009,3,27);
Arrays.sort(staff);
for(Employee e : staff)
{
System.out.println("姓名:" + e.getName() + "\n编号:" + e.getId() +"\n工资:" + e.getSalary() + "\n入职日期:" + e.getHireDay() + "\n");
}
}
}
现在,Employee的对象数组就可以使用Arrays的sort()方法进行排序。
下面是campareTo()方法的实现细节:
public int compareTo(Employee other)
{
return Double.compare(salary,other.salary);
}
这里我们使用了静态Double.compare()方法,当第一个数小于第二个数时,返回一个负数,等于时,返回一个0,否则返回一个整数。