抽象类与接口
抽象类和接口是许多面向对象编程语言(如Java)中的两种面向对象结构。抽象类可以被视为常规(具体)类的抽象版本,而接口可以被视为实现契约的一种方式。抽象类是一个不能初始化但可以扩展的类。接口是必须由其他类实现的类型。在Java中,抽象类使用Abstract关键字声明,而interface关键字用于定义接口。
什么是抽象类?
通常,抽象类,也称为抽象基类(ABC),不能实例化(不能创建该类的实例)。因此,只有当编程语言支持继承(通过扩展类创建子类的能力)时,抽象类才有意义。抽象类通常表示一个抽象的概念或实体,有部分实现或没有实现。因此,抽象类充当从中派生子类的父类,这样子类将共享父类的不完整特性,并且可以添加功能来完成它们。
抽象类可以包含抽象方法。扩展抽象类的子类可以实现这些(继承的)抽象方法。如果子类实现了所有这样的抽象方法,那么它就是一个具体类。但如果不是这样,子类也会变成抽象类。所有这一切意味着,当程序员指定一个类作为一个抽象类时,她是说这个类将是不完整的,它将有需要继承子类完成的元素。这是在两个程序员之间创建契约的好方法,它简化了软件开发中的任务。编写代码来继承的程序员需要严格遵循方法定义(当然也可以有自己的实现)。
什么是接口?
接口是一种抽象类型,用于指定由实现该接口的类实现的协定。interface关键字用于定义接口,Implements关键字用于通过类实现接口(在Java编程语言中)。通常,接口只包含方法签名和常量声明。任何实现特定接口的接口都应该实现接口中定义的所有方法,或者应该声明为抽象类。在Java中,对象引用的类型可以定义为接口类型。但该对象必须为null或应包含实现该特定接口的类的对象。使用Java中的Implements关键字,可以实现单个类的多个接口。
抽象类和接口有什么区别?