在深入研究核心概念时,我感到很困惑。
我研究的是,如果你有接口
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;
}
}
答案 0 :(得分:1)
如果你看一下Comparator<T>
的Javadocs
https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
您将看到唯一不是default
而非static
且尚未通过Object
继承实现的抽象方法是compare(T, T)
。所以它是接口中唯一未实现的方法,因此当您实现它时,您已经在接口中实现了所有未实现的方法。