抽象类和接口的相同点与区别

抽象类和接口的区别

抽象类

抽象方法:

使用abstract修饰的方法,但是没有方法体(没有{ }),只有方法声明,抽象方法强制子类覆写。

一旦一个类有了抽象方法,那么该类也必须声明为抽象类;抽象方法必须属于抽象类,但是抽象类可以没有抽象方法。

抽象类不能实例化,不能创建对象(不能new,但是可以super)。

抽象类必须得有子类,自己的功能才能得以运行;

抽象类的方法只是定义了子类应该具备的行为,但是没有给出怎么去完成行为的功能代码;

交给子类去根据自身特殊情况去完成该父类申明的功能。

抽象方法也称为: 钩子方法;  回调方法。

抽象类里可以有普通方法;

抽象类是类的一种特殊情况,具有类的一切特点,但是不能实例化;一般的都得带有抽象方法。

思考:

1.抽象类能使用final修饰吗?不能

2.抽象类可以定义构造方法吗?

 

接口

interface定义:

1.接口定义一种规范,规定一个类必须做什么,但他不管如何具体去做;

2.[修饰符]interface 接口名 extends 父接口1,父接口2....

1)没有构造方法,不能实例化;

2)接口只能继承接口,不能继承类;

3)接口里没有普通方法,方法全是抽象的;

4)接口里的方法默认修饰符是public abstract;

5)接口里的字段全是全局常量,默认修饰符是public static final

3.接口里的成员包括(主要是前两个):

1)全局常量

2)公共的抽象方法

3)内部类(包括内部类,内部接口,内部枚举类)

使用接口(支持多实现)

1.[修饰符] class 类名 implents 接口1,接口2...;

2.接口的实现必须在extends之后;

3.实现接口的方法必须是public类型;

4.接口不能创建实例,但是可以声明引用类型的变量。

1)此时,引用类型的变量必须指向到其实现类对象。

2)IStudent s = new String();

3)IStudent s = new StudentImpl();

 

接口和抽象类

相同点:

1.都位于继承的顶端,用于被其他实现或者继承;

2.都不能实例化;

3.都包含抽象接口,其子方法都必须覆写这些抽象方法。

区别:

1.抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法;

2.一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了java的单继承)。

二者的选用:

1.优先选用接口,尽量少用抽象类;

2.需要定义子类的行为,又要为子类提供共性功能时才选用抽象类。

抽象类和接口的区别

比较

抽象类

接口

关键字

使用abstract class声明

使用interface声明

定义

包含一个抽象方法的类

抽象方法和全局常量的集合

组成

属性、方法、构造、常量、抽象方法

全局常量、抽象方法

权限

抽象方法的权限可以任意

只能是public权限

使用

通过extends关键字继承抽象类

通过implements关键字实现接口

局限

抽象类存在单继承局限

没有此局限,一个子类可以实现多个接口

顺序

一个子类只能先继承抽象类在实现多个接口

设计模式

模板设计

工厂设计、代理设计

两者联合可以完成一个设配器设计

实际作用

只能做一个模板使用

作为标准、表示能力

使用

两者没有什么本质的区别,但是从实际上来看,如果一个程序中抽象类和接口都可以使用的话,则一定要优先考虑接口,因为接口可以避免单继承所带来的局限。

实例化

都是依靠对象多态性,通过子类进行对象实例化的


猜你喜欢

转载自blog.csdn.net/qq_41939384/article/details/80663318