接口:接口是一个引用类型,与类相似,不过在接口中只能包含常量,方法名和嵌套类型。没有构造器,所以不能被实例化只能被类所实现或者被另外的接口所继承。在接口中声明的方法没有方法体。
抽象类:将类层次中共有的特性抽取出来,创建包含这些共有特性的抽象类,并由抽象类派生出更加具体、有更过实现的子类。抽象类中可能包含抽象方法(即只被声明但没有被实现的方法),可以含有非抽象方法。抽象类也不能被实例化,但可以派生出子类。
因为在java中,一个类只能继承一个父类,这样就限制了子类的功能拓展,但是接口是可以多继承的,所以我们可以写一个接口来继承好多的接口,然后来实现这个接口,这样这个实现类就能实现所有接口的方法。但是如果这个实体类有不能实现的方法,而需要别的类来实现,那么我们就可以用一个抽象类来实现接口中的部分方法,其他的方法交给别的类来实现。
请看下面的几个demo:
1.多接口继承:
interface B{
public void set();
}
interface C{
public void get();
}
interface A extends B,C{
public void add();
}
接口继承也常用于接口升级。如果我们需要在一个旧接口中添加新的方法,这样会影响它的实现类,我们可以写一个新的接口来继承旧接口,把新方法写到新接口中,这样既不会影响旧接口的实现,还能升级接口。
2.方法分部实现:
如果一个类只能实现接口的部分方法,那么我们就可以用抽象类:
abstract class AImpl implements A{
public void set(){
System.out.println("set method");
}
}
如果一个类能实现其他的方法,那么可以让这个类继承抽象类,这样就不必实现接口的全部方法,而只实现抽象类中没有实现的部分:
class AImplAll extends AImpl{
@Override
public void add() {
System.out.println("add method");
}
@Override
public void get() {
System.out.println("get method");
}
}
在java代码的编写中灵活运用接口、抽象类、实体类的关系,可以让代码更清晰,更健壮,更容易维护和升级。