abstract class和interface的区别


首先,需要了解抽象类:

声明方法而不去实现它的类叫做抽象类(abstract class)。①抽象类中可以没有抽象方法,但抽象方法一定在抽象类中;②抽象类不能被实例化(即不能new一个对象),抽象方法也不能自己实例化(可以被子类继承后实例化);③子类必须实例化抽象父类的所有方法,或者将子类声明名为abstract,然后选择性实现父类的方法。④抽象类可以继承实体类,前提是实体类必须有明确的构造函数。

了解接口(interface):

接口是抽象类的变体。①接口中的所有方法都是抽象的;②多继承可以实现接口而获得;③接口只可定义是static final 成员变量;④接口可以继承接口,抽象类可以实现接口;⑤接口更关注“实现了什么功能”,而不管“怎么实现”。

以下参考自:https://blog.csdn.net/longtengshuimeng/article/details/51620481

相同点:

1.两者都是抽象类,都不能实例化

2.interface 实现类及abstract class 的子类都必须要实现已经声明的抽象方法。

不同点:

1.interface 实现,要用implements,而abstract class的实现,要用extends.

2.一个类可以实现多个interface,但一个类只能继承一个abstract class.

3.interface强调特定功能的实现,而abstract class强调所属关系

4.尽管interface实现类及abstract class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),必须要实现。而子类如果被关键子abstract关键字修饰,可以有选择地实现。

 

抽象类的这个选择有两点含义:一是Abstract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract class的方法,在abstract class中必须定义方法体。二是abstract class的子类在继承它时,对非抽象方法即可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类,即是抽象类,当然也不能实例化。

 

interface是完全抽象的,只能声明方法,而且只能声明public的方法,不能声明private 及protected的方法,不能定义方法体,也不能声明实例变量。

 

 

注意:

1.有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。abstract修饰符在修饰类时必须放在类名前。abstract修饰方法就是要求其子类(实现)这个方法,调用时就可以以多态方式调用子类覆盖(实现)后的方法,除非子类本身也是抽象类。

 

2.父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现(覆盖)了,子类才有创建对象的实例的能力,否则子类也必须是抽象类。

 

 

         extends 是继承父类,只要那个类不是声明为final就能继承。java中不支持多重继承,但是可以用接口来实现,这样就要用到implements.继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了。

  extends的差别:extends是继承某个类,继承之后可以使用父类的方法也可以重写父类的方法;implements是实现多个接口,接口的方法必须重写才能使用。需要注意以下几点:

 

1.接口中一般定义的是常量和抽象方法。抽象类中可以包含抽象方法,也可以有非抽象方法,但是有抽象方法的类一定是抽象类。抽象方法不能有方法体。

2.接口(interface)中,方法只能定义抽象方法而且默认是public。常量则是public static final修饰的(不管有没有这些修饰符,方法和常量默认具有这种属性)。

3.一个类可以实现多个接口(这点和继承要有所区别)。

4.接口可以继承其他的接口,并添加新的属性和抽象方法。

5.在类中实现接口的方法时必须加上public修饰符。

 

 

静态变量(相当于常量)可以用类名.静态变量名直接使用,接口又是类的一种,所以接口名.静态变量名可用;

接口引用.静态变量是多态的体现。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM