Chinaunix首页 | 论坛 | 博客
  • 博客访问: 696245
  • 博文数量: 160
  • 博客积分: 8847
  • 博客等级: 中将
  • 技术积分: 1656
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-25 16:46
个人简介

。。。。。。。。。。。。。。。。。。。。。。

文章分类

全部博文(160)

文章存档

2015年(1)

2013年(1)

2012年(4)

2011年(26)

2010年(14)

2009年(36)

2008年(38)

2007年(39)

2006年(1)

分类: Java

2009-05-21 15:03:17


接口有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); 无法编译

    }
}



阅读(1707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~