比较器在java中的接口实现

时间:2017-03-30 20:07:11

标签: java

在深入研究核心概念时,我感到很困惑。

我研究的是,如果你有接口

public interface interfaceconcept {

    public void heyyou(String s);
    public abstract void nono(String s);
    public void kolk(int i);


}

你有一个实现接口的类,那么你必须编写所有方法的主体

  public class implementation implements interfaceconcept{

    @Override
    public void heyyou(String s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void nono(String s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void kolk(int i) {
        // TODO Auto-generated method stub

    }

    }

如果您不想编写方法,可以使用抽象类

现在我正在研究比较器,并且在查看它的类时我发现它是一个接口

public interface Comparator<T> { 
//
}

现在它在另一个类中实现了它,首先它给了我一个错误说。

Order类型必须实现继承的抽象方法Comparator.compare(Order,Order)

我已经通过点击添加未实现的方法添加了所有方法,并删除了除了一个以外的所有方法。

但是当我编译它时,它只是为什么编译?我不支持根据java的规则添加比较器接口的所有未实现的方法吗?

比较器类中的一个方法是

default Comparator<T> reversed() {
        return Collections.reverseOrder(this);
    }

如果你在接口本身编写了一个方法的实现,那有什么意义呢?如果我正确的话,你不能写出任何方法的主体。

public class Order implements Comparator<Order>{

    @Override
    public int compare(Order o1, Order o2) {
        // TODO Auto-generated method stub
        return 0;
    }


    }

1 个答案:

答案 0 :(得分:1)

如果你看一下Comparator<T>的Javadocs https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html 您将看到唯一不是default而非static且尚未通过Object继承实现的抽象方法是compare(T, T)。所以它是接口中唯一未实现的方法,因此当您实现它时,您已经在接口中实现了所有未实现的方法。