接口
在Java程序设计语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
1.接口中的所有方法自动地属于public。
2.接口中的域被自动设为 public static final
3.接口中可以定义常量。
4.接口中绝不能含有实例域,也不能在接口中实现方法。
5.接口是一个没有实例域的抽象类。
让类实现接口的步骤
1.将类声明为实现给定的接口, 关键字implement
2.对接口中的所有方法进行定义。必须把方法声明成public,不然编译器就会给出试图提供更弱的访问权限的警告信息。
下面是实现Compareable接口进行排序的的例子。
package interfaces;
public class Employee implements Comparable<Employee>{
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public int compareTo(Employee employee) {
return Double.compare(this.salary, employee.salary);
}
}
package interfaces;
import java.util.Arrays;
public class EmployeeSortTest {
public static void main(String[] args) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("Harry Hacker", 35000);
staff[1] = new Employee("carl Cracker", 75000);
staff[2] = new Employee("Tony Tester", 38000);
Arrays.sort(staff);
for(Employee e : staff)
System.out.println("name=" + e.getName() + ", salary=" + e.getSalary());
}
}
equals方法的最佳实践
1.如果子类之间的比较含义不一样, 那就属于不同类对象的非法比较。每个compareTo方法都应该在开始时进行下列检测:
if(getClass() != other.getClass()) throw new ClassCaseException();
2.如果存在这样一种通用算法,它能够对两个不同的子类对象进行比较,则应该在超类中提供一个compareTo方法,并将这个方法声明为final。
3.假如,想要按照类似职务排序的话,那就应该在Employee类中提供一个rank方法。每个子类覆盖rank,并实现一个比较rank值的compareTo方法。
instanceOf 判断某个类是不是这个类或者这个类的父类或者父接口 的实例。