抽象类与接口的区别(

抽象类就是将相似或类似的部分给抽取出来,这句话看上去很搞笑,其实它说出了抽象类的真理。你可能会说我不是能够重写一个公共类,而后我实例化这个公共类,调用相同的方法就能够了,这里是能够,实际上抽象类的工做也就是这个,不过他省去了你实例化的这个步骤,而且你还能够生载这个方法 spa

 

抽象类特性: 继承

1. 非抽象子类必须彻底实现这个抽象中全部的抽象方法 接口

2. 抽象类不能被实例化,它的意义在于被扩展。访问方式TestClass::test(‘我是抽象方法’); test

3. 抽象类一般(也能够没有)至少有1个抽象方法,抽象方法中没有大括号。非抽象方法是有的 变量

4. 抽象方法没必要实现具体的功能,由子类来完成 扩展

5. 在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义 方法

6. 抽象类的方法能够有参数,也能够为空 im

7.若是抽象方法有参数,那么子类的实现也必须有相同的参数个数 工作

 

 

 

 

他们的不一样点: 参数

1.抽象类中能够有非抽象的方法而接口中只可以有抽象的方法!

2.一个子类能够继承多个接口,而一个类只能继承一个抽象类!

3.接口的使用方式经过implements关键字进行,抽象类则是经过继承extends关键字进行!

4.在声明上

接口中只能声明抽象方法(包括静态抽象方法)和静态变量.而抽象类除了包含通常类的特色,即包括属性和通常方法外,还能够声明抽象方法(包括静态抽象方法).

 

5.在写法上

1、接口的抽象方法前不用也不能加abstract关键字,默认隐式就是抽象方法,也不能加final关键字来防止抽象方法的继承.而抽象类中抽象方法前则必须加上abstract表示显示声明为抽象方法.

 

2、接口的抽象方法默认是public的,也只能是public的,不能用private、protected修饰符修饰.而抽象类则能够。

 

6. 一个非抽象类若是extends一个抽象类后只需(而且必需)全部的实现抽象方法就好了,非抽象方法能够不实现。若是implements一个接口,就必须实现接口中的全部方法(由于接口中的方法均为抽象方法);

相关文章
相关标签/搜索