最近学习接口感到有些迷茫?看不出接口的优势在哪儿
因为我觉得接口里的方法不管是什么,接口里的方法还是要在相应的类中写出来
这跟没有接口,在类里直接写个方法差不多啊

解决方案 »

  1.   

    同求答案...除了在jni里面用接口感觉出意义,其他的都感觉不出来啊
      

  2.   

    抽象类和接口的使用效果区别在于:
    如果一个类继承与抽象类,那它就不能再继承于其他类了。(Java是单继承)。
    在你的Case中,如果上述情况是个问题的话,那就只能用接口了。如果不是个问题,则用抽象类和接口都可以(甚至可以说,这时用抽象类优于用接口)。
      

  3.   

    (1)接口一般跟多态机制配合使用,如实现List<T>接口的所有子类变量(ArrayList<T>,LinkedList<T>)都可以传递给List<T>类型的参数的方法,如定义方法void demo(List<Object> list){//do something...},可将List<Object> list = new ArrayList<Object>();或new LinkedList<Object>()传递给demo方法,以实现动态的类型安全检查,曾强方法的灵活性。
    (2)接口相比抽象类可以实现假多重继承,当准备为某些类添加某个方法功能时可令这些类实现某个定义该方法的接口而不比在乎这些类是否继承了哪些抽象类,因为类可以实现任意个接口(理论)而只能有一个父类,如java核心类库中的Comparabale,Comparator,Serializable接口等
    (3)
    接口还有很多优势再次不一一赘述,楼主可看下java编程思想,effective java等书,当然足够的练习可以有更深刻的认识!
      

  4.   

    当你需要反复重新创建一个类,而这个类似乎都隶属于某对象,从效果上看都一样,而具体实现步骤却大不一样。
    记得某位大神曾经这样解释接口:
    我们首先创建一个杀手类,他有一个方法kill(),有把武器gun。
    于是我们乐呵呵的killer.kill("大水牛");
    然后发现又有一个杀手,用片刀,悲催了,发现要重写杀手类,改为抢杀手、片刀杀手两个类。楼主估计郁闷了。
    呵呵,不要紧,接口出现了。
    我们只用定义一个接口Killer,定义一个kill()方法即可。
    不论你是用什么杀的,我们都这样做
    Killer killer = new 抢杀手();
    Killer killer = new 片刀杀手();
    然后就,killer.kill("大水牛");
    呵呵,接口的作用楼主应该知道了吧:接口就是屏蔽了底层实现,我们只知道kill()实现的目的,对应于我们只去调用这个方法,而不知道他是怎么去实现的,对应于我们根本不去管怎么去实现的。
    就代码自身而论,接口使之显得更为庞大;就使用者而论,接口是操作变得更为容易。
      

  5.   

    我刚刚发现一点
    在效果上抽象类和接口差不多
    在这种情况下,抽象类的实现必须是父类和子类的关系
    而接口没有限制,接口比类带来更多的灵活性,因为不用使每件东西都适用于同一类型的类package ex14;
    public class TestAbstractClass { public static void main(String[] args) {
    // TODO 自动生成方法存根
    Animal animal=new Chicken();
    eat(animal);

    animal=new Duck();
    eat(animal);
    }

    public static void eat(Animal animal){
    System.out.println(animal.howToEat());
    }}
    class Chicken extends Animal{
    public String howToEat(){
    return "Fry it";
    }
    }class Duck extends Animal{
    public String howToEat(){
    return "Roast it";
    }
    }package ex14;abstract class Animal{
    public abstract String howToEat();
    }
    而接口不需要父类子类关系package ex14;public class TestInterface { public static void main(String[] args) {
    // TODO 自动生成方法存根
    Edible stuff=new Bird();
    eat(stuff);

    stuff=new Pig();
    eat(stuff);

    stuff=new Broccoli();
    eat(stuff);
    }

    public static void eat(Edible stuff){
    System.out.println(stuff.howToEat());
    }}interface Edible {
    /**Describe how to eat*/
    public abstract String howToEat();
    }
    class Bird implements Edible{
    public String howToEat(){
    return "Fry it";
    }
    }class Pig implements Edible{
    public String howToEat(){
    return "Roast it";
    }
    }class Broccoli implements Edible{
    public String howToEat(){
    return "Stir-fry it";
    }
    }