特性 | 接口 | 抽象类 |
定义 | 定义了一组方法的契约,不包含具体实现 | 定义了一组方法的骨架,可以包含具体实现 |
继承关系 | 接口之间支持多重继承 | 类之间只能单继承 |
成员变量 | 只能定义常量,默认为 | 可以定义实例变量,并且可以有不同的访问权限 |
构造函数 | 不能定义构造函数 | 可以定义构造函数 |
方法实现 | 所有方法都需要被实现 | 可以包含已经实现的方法,但也可以包含抽象方法 |
实例化对象 | 不能直接实例化接口 | 不能直接实例化抽象类 |
使用场景 | 用于描述一组相关的行为或能力 | 用于定义一组相关的类,提供默认的行为和共享的属性 |
抽象类可以提供成员方法的实现细节,而接口中只能存在
public abstract方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是
public static final类型的;接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
最简回答:接口是一种规范,它定义了一组方法的签名,而不包含具体实现。一个类可以实现多个接口。抽象类是一种可以包含具体方法和抽象方法的类,它可以被继承,但不能被实例化。一个类只能继承一个抽象类。简而言之,接口关注的是行为的规范,而抽象类关注的是共享的功能。