package myPackage;
/**
* interface Comparable<T>
* {
* int compareTo(T o);
* }
*/
public class Employee implements Comparable<Employee>
{
//Comparable<Employee>是一个模版类,是可以使用具体的类进行实例化声明的
private String m_sName = "";
// private double m_dSalary = 0;
//通常情况下,Java建议尽量不使用基础类型,以提供更好的跨平台支持,保证在不同平台下的类型一致
private Double m_dSalary = 0.0;//并且当使用了指定类型后,就会进行类型检查,=0的赋值是会报错的
public Employee(String name,Double salary)
{
m_sName = name;
m_dSalary = salary;
}
public String getName()
{
return m_sName;
}
public double getSalary()
{
return m_dSalary;
}
//若要实现排序sort,则需实现Comparable接口
/**
* 为什么不直接在Employee类中提供一个compareTo方法呢?
* 因为Java是强类型语言,在sort方法被调用的时候,sort方法中可能存在compareTo的调用,
* 编译器必须确定比较的对象具有compareTo方法,以避免出错,所以要求所有使用sort排序的类都要实现Comparable接口,
* 这样就可以保证一定有compareTo方法了。
*/
public int compareTo(Employee other)
{
return Double.compare(m_dSalary, other.m_dSalary);
//other.m_dSalary,在类方法中,同一个类的对象间是可以访问private实例域的
//compare比较两个数的大小,相等返回0,前者小则返回一个负数,前者大则返回一个正数
}
}
package myPackage;
import java.util.Arrays;
/**
* 接口是用来描述类具有什么功能,而并不给出每个功能的具体实现
* 接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义
* 接口中的方法自动的属于public
* 最重要的是,要知道接口不应该提供哪些功能。
* 接口绝不能含有实例域,也不能在接口中实现方法。
* 提供实例域和方法实现的任务应该交给实现接口的那个类来完成。
* 可以将接口看成是没有实例域的抽象类,但切记接口不是类。
*/
public class Session6
{
public static void main(String[] args)
{
Employee[] staff = new Employee[3];//创建一个Employee数组
staff[0] = new Employee("hary",8888.0);//引用一个对象,参数必须指定浮点型,会有类型检查,默认double,加F后则为float
staff[1] = new Employee("jack",7000.0);
staff[2] = new Employee("tony",4555.0);
Arrays.sort(staff);
for(Employee e : staff)
{
System.out.println(e.getName()+"'s "+"salary is : "+e.getSalary());
}
}
}
输出结果:
tony's salary is : 4555.0
jack's salary is : 7000.0
hary's salary is : 8888.0
package myPackage;
//接口的写法和类的写法一致,只是接口中不能包含实例域和方法
public interface MyInterface
{
//接口中的方法自动的成为public,可以不用显示的使用public进行修饰
//同样也不建议使用public修饰,增加了许多不必要的关键字
void testInterface();
}
//并且接口还可以扩展,可以从其它接口扩展
//和类的写法一样,一个类文件中只能有一个public接口或类
//要使用public修饰,则必须在它自己的类文件中进行声明
//和类一样,虽然书上说的扩展,但就语法上,是接口的继承
/**
*和类不一样的是,Java中类不支持多继承,但却支持从多个接口扩展,多个接口间用,号分隔
*/
/*public */interface MyInterface2 extends MyInterface
{
void testInterface2();
//接口中虽然不能定义方法,但却可以包含常量
//接口中的域将被自动的设置为public static final
Integer INTEGER_TEST = 65535;
//Java的语法中增加了许多特定场合使用的特性,比如这里的接口域,实际是增加了语言的复杂性
}