抽象类(abstract)和接口(interface)的区别

抽象类和接口都是抽象类定义的两种机制,抽象类表示的是一个实体,接口表示的是一个概念,只要包含有抽象方法的类都是抽象类,抽象类可以声明方法的存在而不去实现,被声明抽象的方法不能包含方法体。在实现时必须包括相同的或者更低的访问级别。抽象类在使用过程中不能被实例化,但是可以创建一个对象使它指向子类的一个实例,抽象类的子类为父类中的所有抽象方法提供具体的实现,否则他们都是抽象类。接口可以被看作抽象类的变体,接口中的所有方法都是抽象的,可以通过接口间接的实现多重继承。接口中的成员变量都是static final类型,由于抽象类可以包括部分方法的实现,因此某些场景中抽象比接口有更多优势。

接口与抽象类的共同点:

1.都不能被实例化。

2.接口的实现类或抽象类的子类都是只有实现了接口或抽象类中的方法后才能实例化。

不同点:

1.接口需要实现,但是抽象类只能被继承。一个类可以实现多个接口,但是一个类却只能继承一个抽象类,所以使用接口就可以实现多重继承的目的。

2.接口强调的是某特定功能的实现,是has-a的关系,但是抽象类强调所属关系,是is-a的关系。

3.接口中定义的成员变量默认是public static final,只能够有静态的不能被修改的数据成员,而且必须给他们赋值,它的所有成员方法都是public,abstract的,而且只能被这两个关键字修饰。抽象类可以有自己的数据成员变量,也可以有非抽象的成员方法,抽象类的成员变量默认default,也可以被其他修饰,这些成员变量可以在子类中被重新定义,或赋值,当功能需要累积时用抽象,不需累积时用接口。

4.接口一般被用于实现比较常用的功能,方便以后维护或者添加删除;而抽象类更倾向于充当公共类的角色,不适用日后修改代码。

抽象类一般用于同类事物中有无法具体描述的方法的场景

接口一般用于不同类之间,定义不同类之间的通信规则

猜你喜欢

转载自blog.csdn.net/qq_36330733/article/details/88318031