Java接口和抽象类的区别
下文笔者将讲述java中接口和抽象类的区别说明,如下所示:
抽象类中可以有部分方法的实现,子类中可不实现这些方法,可提高代码的重用性
例:
A中有方法method2的实现
子类B、C中不需要重写method2方法,method2就是代码可重用的例子
A并没有定义method1的实现
B、C可根据自己的特点实现method1方法
A无法约束B、C的行为
B、C可以自由地发挥自己的特点现实 method1和 method2方法,接口A毫无掌控能力。
类是对象的模板 抽象类和接口是一个类的模板接口可以理解为一个特殊的抽象类
接口和类的相同点: 1.两者都不能实例化 2.都能包含抽象方法
接口同抽象类的区别:
抽象类中可以有部分方法的实现,子类中可不实现这些方法,可提高代码的重用性
接口中只能包含抽象方法,最多只能有一个default的实现方法
例:
public abstract class A{ public abstract void method1(); public void method2(){ //A method2 } } public class B extends A{ public void method1(){ //B method1 } } public class C extends A{ public void method1(){ //C method1 } }以上抽象类A有两个子类B、C
A中有方法method2的实现
子类B、C中不需要重写method2方法,method2就是代码可重用的例子
A并没有定义method1的实现
B、C可根据自己的特点实现method1方法
public interface A{ public void method1(); public void method2(); } public class B implements A{ public void method1(){ //B method1 } public void method2(){ //B method2 } } public class C implements A{ public void method1(){ //C method1 } public void method2(){ //C method2 } }接口A无法为实现类B、C提供公共的功能
A无法约束B、C的行为
B、C可以自由地发挥自己的特点现实 method1和 method2方法,接口A毫无掌控能力。
一个类只能继承一个直接的父类(可能是抽象类),但一个类可以实现多个接口
interface A{ public void method2(); } interface B{ public void method1(); } class C implements A,B{ public void method1(){ //C method1 } public void method2(){ //C method2 } } //可以如此灵活的使用C,并且C还有机会进行扩展,实现其他接口 A a=new C(); B b=new C(); abstract class A{ public abstract void method1(); } abstract class B extends A{ public abstract void method2(); } class C extends B{ public void method1(){ //C method1 } public void method2() { //C method2 } }
综上所述 接口和抽象类有各自的优缺点,选择接口还是抽象类上,我们将遵循一下原则: 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。