抽象类与接口的异同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类与接口的异同相关的知识,希望对你有一定的参考价值。

抽象类和接口是java中非常重要的两个概念,是java多态的基础,在java的设计模式中他们无处不在,为了归纳记忆,我们总结下抽象类和接口的相同和不同之处。

我们先说说他们各自的特点:

     接口:

     1、接口不是一个类,这点从声明就可以看出来声明关键字为interface 而类的声明是class,但是接口是一种抽象类型。

     2、接口不能被实例化,因此接口中也不能有构造器。

     3、接口中的方法默认是public abstract 类型的,且不能由其他private 等修饰符修饰。

     4、接口中的方法如果不是static类型的,那么方法必须是抽象的不能有方法体,但是一般不在接口中直接定义静态方法去执行代码块。

     5、接口中可以声明变量,默认的是public static final的,因此是不能修改的。

     6、接口中不能用this表类当前类对象。

     7、接口可以多实现。

    抽象类:

     1、抽象类是一个类,用abstract修饰,用来声明该类是一个抽象的类。

     2、抽象类本身不可以实例化,但可以声明构造器,用于继承它的子类初始化时初始化(如果要用new 抽象类必须要重写重写方法的实现)。

     3、抽象类型既可以有抽象方法,也可以有非抽象的方法,抽象方法需要用abstract修饰,没有具体实现,没有方法体。

     4、抽象方法只能单继承。

 

     由此我们基本上可以总结出接口和抽象类的异同:

     异:

     一:声明方式不同:抽象类用abstract修饰,接口用interface修饰。

     二:方法声明不同:抽象类中既可以有抽象方法,也可以有非抽象方法;而接口中方法不能存在方法默认是public abstract的没有方法体,但是可以用static修饰后写方法体。

     三:变量声明不同:接口中的变量默认是public static final的,但是抽象类中不是。

     四:this使用不同:接口中不能使用this指向当前对象(接口不能被实例化所以没有this对象),抽象类中存在this对象。

    同:

     一:接口和抽象类都是一种抽象的表现形式。

     二:接口和抽象类都不能实例化。

     三:接口和抽象类中抽象方法都不能有具体实现。

以上是关于抽象类与接口的异同的主要内容,如果未能解决你的问题,请参考以下文章

java中接口和抽象类的异同点

抽象类和接口的异同

java抽象类与接口 中 相同方法的调用

计算机java抽象类与接口实验报告怎么写

c#多态之抽象类与虚方法的异同点~

深入delphi编程理解之接口接口与类的异同及接口的声明和实现