我们既然拥有抽象类这个概念,为什么还要费尽力气去引入接口的概念呢?为什么不把前述的以个Comparable接口直接在父类中定义为如下的抽象类呢?
abstract class Comparable{
public abstract int compareTo(Object other);//抽象方法呢?
}
接着使用Employee类继承着个抽象的Comparable的类?
class Employee extends Comparable{
public int compareTo(Object other){
.................
}
}
答案是不能的,因为利用抽象类来进行表示类的通用属性存在这样一个问题:因为每个类智能扩展(继承)一个类,而不能扩展其他的类,但是一个类可以实现多个接口,所以说使用接口要比使用抽象类来的功能更为强大一些。
接口可以提供多重继承的大部分功能,同时还可以避免多重继承带来的许多问题比如说低效性和复杂性。
静态方法
在接口内一般不建议增加静态方法,通常的做法是将静态方法防止在伴随类中。在标准库中,你会看到成对出现的接口和使用工具类,如Collection接口/Collections类、Path接口/Paths类。
以Paths类为例,Path类的作用是可以由一个字符串序列构造成一个文件夹或者是目录的路径,如Path.get(“jdk1.8.0”,“jre”,“bin”)可以看到其中包含了两个工厂方法。可以通过为Path接口增加以下的静态方法,就可以不需要使用Path类了
public interface Path
{
public static Path get(String first,String ... more){
return FileSystem.getDefult().getPath(first,...more)
}
}
这样进行定义是完全合法的。