`

抽象类和接口

    博客分类:
  • java
 
阅读更多

两者相似之处在于:抽象类和接口都不能被实例化,两种都是java实现抽象的方式。不同之处分两个方面:


一、语法层面

  1. 抽象类可以有构造方法,接口中不能有构造方法;
  2. 抽象类中可以有普通成员变量,接口中没有普通成员变量(默认public static final );
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的;
  4. 抽象类中的抽象方法的可以是public,protected的,但接口中的抽象方法只能是public的;
  5. 抽象类中可以包含静态方法,接口中不能包含静态方法
  6. 抽象类中可以包含任意访问权限的静态成员变量,但接口中定义的变量只能是public static final类型。
  7. 一个类可以实现多个接口,但只能继承一个抽象类。

二、思想层面

 

     抽象类 在Java中体现了一种继承关系,要想使得继承关系合理, 抽象类 和派生类之间必须存在“is-a”关系,即 

父类和子类在概念本质上应该是相同的。对于interface来说则不然,并不要求 interface的实现类和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(模版)而已。


总结来说:

 

     抽象类与子类为"is a"关系,它抽象出事物的共同本质特征,可单一继承;

     接口与实现类为"like a"关系,它定义并规范了个性化的功能特征,可多重继承(实现)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics