什么时候用抽象类,什么时候用接口?

抽象类是对类的抽象,接口是对行为的抽象,抽象类定义的是类,接口定义的是行为。
如果行为跨越不同类的对象,可使用接口,如果对现实类对象、可以用抽象类。
抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类。
接口是根本不知道子类的存在,方法如何实现还不确认,只是预先定义行为规范。

接口例子:
集合框架List接口,并不知道子类的存在,只是预先定义了List的行为规范,让实现它的类有相同的使用方法。

抽象类的例子:
集合框架AbstractList,从子类分析出公共的属性和方法,并实现了List接口,泛化成一个抽象父类,然后由ArrayList继承AbstractList并实现抽象方法。

抽象类和接口的区别:

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

注:JDK 1.8 以后,接口里可以有静态方法和方法体了。

猜你喜欢

转载自blog.csdn.net/u011582840/article/details/107589545