抽象类和接口分别应该在什么时候使用
在本篇我们将要学到在什么情况下使用抽象类要比使用接口程序更有效率。
抽象类的使用
一个抽象类使用关键字abstract来定义,抽象类可以包含抽象方法,当然也可以不包含抽象的方法。抽象类不能被实例化成对象,但是它可以被继承。一个抽象类可能包含有静态属性,也包含有静态方法。当一个抽象类被继承以后,子类通常要实现其父类中的所有的抽象的方法。然而,如果子类没有实现所有的父类中的抽象的方法,那么这个子类也必须被定义成抽象类。
抽象方法就是不用没有方法体的——也就是没有实现的方法(没有花括号并且后面跟着分号),就像下面这样:
abstract void sum(int a, int b);
如果在你的程序中有下面的这些情况,那你就要考虑使用抽象类了:
1. 你想要在几个关联紧密的类之间共享代码。
2. 你想要继承抽象类的那些类有一些公共方法或属性抑或是有修改protected或private属性的权限。这时你也可以考虑使用抽象类。
3. 你想要声明非静态或者是非最终执行的属性。你可以获得并且修改这些属性所属的对象的状态。
接口的使用
一个接口仅仅是一个对象的方法的声明,具体的实现并不在接口中来做。一个接口使用关键字interface来定义。在接口中,我们定义一个对象可以执行什么类型的操作。这些操作方法由实现该接口的类来实现。接口可以看作是一个类和外部环境之间的联系。外部环境通过接口可以知道一个对象可以向其提供什么样的操作。该联系是在程序编译的时候有解析器激活。
interface Vehical {
// declaration
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
class Car implements Vehical {
int speed = 0;
int gear = 1;
// implementation
void changeGear(int newValue) {
gear = newValue;
}
void speedUp(int increment) {
speed = speed + increment;
}
void applyBrakes(int decrement) {
speed = speed - decrement;
}
void printStates() {
System.out.println(" speed:" + speed + " gear:" + gear);
}
}
当有下面的情形的时候,我们可以考虑使用接口:
1. 用相互之间无关的类实现你的接口。举例来说,可比较的和可克隆的那些接口可以使用无关的类来实现。
2. 你想指定一个特定数据类型的行为,但是不用去关心由谁来实现这一行为。
3. 你想要利用多继承的优势。
以上就是对何时使用抽象类以及何时使用接口所做的简单的介绍。希望对大家有所帮助。
相关文章
TypeScript 中的 Hashmap 和字典接口
发布时间:2023/03/12 浏览次数:121 分类:TypeScript
-
本教程通过定义接口来教授如何在 TypeScript 中实现 Hashmap 或 Dictionary 的核心概念,还提供了为什么在 TypeScript 中使用接口的知识。
TypeScript 中的接口默认值
发布时间:2023/03/09 浏览次数:158 分类:TypeScript
-
本教程指南提供了 TypeScript 接口的核心概念,并通过编码示例和实现定义了 TypeScript 中接口的默认值。