日期:2014-05-20  浏览次数:20708 次

接口调用到底有什么独有的好处?
就是将实现接口的类的对象赋值给接口变量,然后又由接口变量来调用对象的方法,看不出来有什么好处啊?

------解决方案--------------------
估计你是初学者,没有仔细了解java的自动向下绑定机制,还有所谓的“面向接口编程”。
如果你的接口有三个实现类,而三个实现类实现接口的某个方法的逻辑各不相同,利用java的多态机制会非常简化代码编写,逻辑也会很清晰。
给你举个例子,假设有A B C三个类,都有一个move()方法,如果要求你实现一个 数组或者是集合,集合里面只能是A B C的一种,需要遍历集合然后 分别调用集合元素的move()方法 ,你想想怎么弄?

你只能具体instanceof A 这样挨个判定是那个具体类型,然后分别调用A.move() B.move() C.move()方法

而加入你定义了一个A B C 统一的接口 名称为MInterface ,接口的方法就是move() ,那么就可以用下面的代码很简单实现
Java code


public class InterfaceDemo {
    public static void main(String[] args) {
        MInterface[] ary=new MInterface[5];
        ary[0]=new A();
        ary[1]=new B();
        ary[2]=new C();
        ary[3]=new B();
        ary[4]=new A();//接口的具体实现类
        for(MInterface m:ary){
            m.move();//java的自动向下绑定会自动实现具体实现类的move()方法
        }
    }
}

class A implements MInterface{

    @Override
    public void move() {
        //To change body of implemented methods use File | Settings | File Templates.
        System.out.println("这一行代表A对接口方法的业务逻辑实现");
    }
}
class B implements MInterface{

    @Override
    public void move() {
        //To change body of implemented methods use File | Settings | File Templates.
        System.out.println("这一行代表B对接口方法的业务逻辑实现");
    }
}

class C implements MInterface{

    @Override
    public void move() {
        //To change body of implemented methods use File | Settings | File Templates.
        System.out.println("这一行代表C对接口方法的业务逻辑实现");
    }
}



interface MInterface{
    public void move();
}

------解决方案--------------------
1楼的
MInterface m = new A();
你用m.move();只能调用A的实现方法
用B的时候 你还不是要重新new B()出来。
你这个还是木有说出其中的好处。