小弟初学java,关于接口小弟有点不明,定义一个接口,一个接口类interface b,一个实现类class a implements b为什么要单独定义一个interface的文件,感觉这个文件定义的东西有点多余,如果某个class X要使用这个接口,  直接class  x implements b,并且方法还要重写。
如果定义一个接口,实现类,如果需要此实现类的方法时,直接new 一个实现类的对象出来。这样使用感觉interface的这个文件时多余的

解决方案 »

  1.   

    呵呵
    我来个通俗点例子吧
    房间里面有个电源插座(规定:提供电压220v、频率50Hz),你要是要使用这个插座,就必须满足这个条件。
    并且这个电源插座可以提供给多种电器。
    这就是接口。呵呵
    不晓得楼主是否明白点。。
      

  2.   

    在小程序中,可能还体现不出来接口的好处和必要性,在大的项目中,接口的好处就很明显了 接口的作用主要有3点:
    1.通过接口,可以把一个类的某些方法,而不是所有方法,提供给类的用户使用
    2.利用接口类型的参数,强制类去实现某种行为
    3.接口类型的多态 关于接口的作用第一点,请看下面这个雇员的例子,其中定义了修改个人信息和计算薪水的方法 public abstract class Employee implements Payable, EmployeeInfo
    {
        private String name;
        private double weeklyPay;
        //构造器
        public Employee(String name, String address)
        {
            this.name = name;
            this.address = address;
        }    //跟个人信息由关的方法
        public String getName()
        {
            return name;
        }
        public void setName(String n)
        {
            name = n;
        }    //跟薪水有关的方法
        public double getWeeklyPay()
        {
            return weeklyPay;
        }
        public void computePay(int hoursWorked)
        {
            weeklyPay = hoursWorked * 6.50;
            System.out.println("Weekly pay for " + name + " is $" + weeklyPay);
        }
    }//Payable接口只提供跟薪水有关的方法 
    interface Payable
    {
        public void computePay(int hoursWorked);
        public double getWeeklyPay();
    }//EmployeeInfo接口只提供跟个人信息有关的方法 
    interface EmployeeInfo
    {
        public String getName();
        public void setName(String n);
    }//如果写一个会计的类,其中的方法把Payable作为参数,会计就只能使用跟薪水有关的方法,而不能修改Employee的个人信息
    class Payroll
    {
        public void payEmployee(Payable p)
        {
            p.computePay(40);
        }    public void printPaycheck(Payable p)
        {
            System.out.println("Printing check for $" + p.getWeeklyPay());
        }
    }//如果再写一个HR的类,其中的方法的参数为EmployeeInfo,那么HR就只能使用跟员工个人信息有关的方法,而不能看到薪水等 
    class HumanResources
    {
        public String getInfo(EmployeeInfo e)
        {
            return e.getName() + " " + e.getAddress();
        }    public void changeName(EmployeeInfo e, String name)
        {
            System.out.println("Changing name for " + e.getName());
            e.setName(name);
            System.out.println("New name is " + e.getName());
        }
    }
    //这样一来,通过接口,Employee类就可以提供部分方法给该类的用户使用,而不会暴露其他的方法,这个是接口的作用之一