迹忆博客
当前位置: 主页 > 学无止境 > 编程语言 > 文章

抽象类和接口分别应该在什么时候使用

发布时间: 2016-06-07 作者: 迹忆 浏览次数:

在本篇我们将要学到在什么情况下使用抽象类要比使用接口程序更有效率。

抽象类的使用

一个抽象类使用关键字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. 你想要利用多继承的优势。

以上就是对何时使用抽象类以及何时使用接口所做的简单的介绍。希望对大家有所帮助。

以上文章翻译自:When to use Abstract class and Interface

赞助
迹忆博客

除非注明转载,本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址: