接口和抽象类

来源:互联网 发布:计算机编程课程 编辑:程序博客网 时间:2024/05/21 06:57

之前一直太懒,什么都没有留下。后来,今天中午和阿里的一位大牛聊天时,大彻大悟,嘿嘿。以后会坚持我的博客之路。这里的Java部分,我不打算从基础写起,而主要是对我的一些疑惑的地方进行记载。如果有不对的地方,望大家批评指正,共同进步。

接口和抽象类一直困扰我开发的一个问题,今天我在此纪录下我的认知,如果有不对的地方,希望大神们留下脚步,给出您的回复,谢谢!

下面我们将对接口和抽象类分别进行讲解:

抽象类

       规则:

 1.抽象类必须使用abstract修饰符来修饰;

 2.抽象类不可以被实例化,即无法通过new关键字来创建某个抽象类的实例(即使某个抽象类不包含任何抽象方法,该抽象类也不可实例化)。

 3.  抽象类主要用于被其子类调用,可以包含成员变量、方法(抽象或者非抽象)、构造器、内部类、初始化块。

         4.含有抽象方法的类只能被定义为抽象类。

 作用:

          抽象类一般被当作父类来被继承,具有较高的抽象层次。

  1.由于抽象类一般作为多个子类的通用模板,避免了子类设计的随意性。

          2.抽象父类只需定义需要使用的某些方法,不必具体实现。

接口

      定义:

          通过上面抽象类的描述可知,抽象类是指从多个类中抽象出来的模板,而接口可以理解为一种更为特殊,更为彻底的抽象类。

          规则:

          1.接口里不能包含普通方法,接口里的所有方法必须都是抽象方法。(java 8之前)

          2.java 8 对接口进行了改进,允许在接口中定义默认方法。

          3.接口里的成员只能是静态变量。

          作用:

          1.定义变量,强制转换

          2.调用接口中定义的常量 

          3.被其他类实现。


二者对比:

        相似:

          1.接口和抽象类都不能被实例化。

           2.接口和抽象类都可以包含抽象方法,实现接口或抽象类的子类都必须实现这些方法。

   差别:

           1.接口里只能包含抽象方法和默认方法,不能包含普通方法;抽象类则可以包含普通方法。

           2.接口里不能定义静态方法;抽象类可以。

           3.接口里只能定义静态常量,不能定义普通成员变量;抽象类则都可以。

           4.接口里不能包含构造器;抽象类可以,用于初始化操作。

           5.接口不能包含初始化块;抽象类可以。

           6.一个类只能有一个抽象类;但是一个类可以实现多个接口,从而弥补java单继承的缺陷。

0 0