接口有2个重要的用法,一个是给类暴露特定的方法,一个是强制类去实现特定的方法。
我有2个接口,如果一个类同时实现了这2个接口,那么这个类需要重写这2个接口中的所有方法,如果这2个接口扩展了其他的父类,那么父类接口中的方法也需要重写。不想重写这些方法,那么你需要把类设置为抽象类。
暴露出来的接口是给特定的类用的,没有暴露出来的方法不可以引用。
例如:
有2个接口:
package cn.youhap.interface2;
public interface Payroll{
public double getWeeklyPay();
public void computePay(int weeks);
public void mailCheck();
}
|
package cn.youhap.interface2;
public interface HumanResource{
public void setName(String name);
public void setSSN(String ssn);
public void setAddress(String addr);
public String getName();
public String getSSN();
public String getAddress();
}
|
上面的2个接口,暴露出来的方法是针对不同的类,让它们去引用的。
例如:第一个接口是针对财务部门,财务部门只需要用email和计算工资这些方法,它不能像下面的人力资源部门,可以修改用户的信息;同样,下面的接口是针对人力资源的方法,它只能对用户的信息进行操作,不能计算用户的工资。
有一个用户的类,去实现了这2个接口:
package cn.youhap.interface2;
public class Employee implements HumanResource, Payroll{
private String name;
private String address;
private String SSN;
private double weeklyPay;
private double rate;
public Employee(String name, String addr, String ssn, double rate){
super();
this.setName(name);
this.setSSN(ssn);
this.setAddress(addr);
this.setRate(rate);
}
public String getName(){
return this.name;
}
public double getWeeklyPay(){
return this.weeklyPay;
}
public String getSSN(){
return this.SSN;
}
public String getAddress(){
return this.address;
}
public double getRate(){
return this.rate;
}
public void mailCheck(){
System.out.println("This is a mail for " + this.getName());
}
public void setName(String name){
this.name = name;
}
public void setSSN(String ssn){
this.SSN = ssn;
}
public void setAddress(String addr){
this.address = addr;
}
public void setRate(double r){
this.rate = r;
}
public void computePay(int weeks){
if (weeks > 0){
this.weeklyPay = weeks * this.getRate();
}
System.out.println("Compute paying for " + this.getName() + ". His weekly pay is: ");
}
}
|
接口实现了。因为接口无法实例化,所以需要对应接口的2个类,来实现对接口的引用。
package cn.youhap.interface2;
public class PayDep {
public void computerPay(Payroll p){
p.mailCheck();
p.computePay(4);
}
public void printPay(Payroll p){
System.out.println(p.getWeeklyPay());
}
}
|
上面这类对应接口Payroll
package cn.youhap.interface2;
public class HRDep {
public void displayInfo(HumanResource h){
System.out.println(h.getName());
System.out.println(h.getSSN());
}
public void setInfo(HumanResource h){
h.setName("liujun");
h.setSSN("142233....");
}
}
|
上面这个类对应接口HumanResource。
OK,最后测试我们的工程:
package cn.youhap.interface2;
public class InterfaceDemo{
public static void main(String [] args){
Employee e = new Employee("WangWei", "Shanxi", "142288...", 66.1);
//此时,由于Employee实现了2个接口,那么这2个接口就变成了Employee的父类。
//所以,可以这样:
Payroll e1 = new Employee("ee", "few", "few", 44.5);
PayDep pd = new PayDep();
HRDep hr = new HRDep();
pd.computerPay(e);
pd.printPay(e);
pd.computerPay(e1);
pd.printPay(e1);
//pd.setInfo(e);无法编译
hr.displayInfo(e);
hr.setInfo(e);
hr.displayInfo(e);
//hr.computePay(e); 无法编译
}
}
|
阅读(1743) | 评论(0) | 转发(0) |