抽象类与接口的异同点
定义
抽象类:包含抽象方法的类,用abstract修饰的类。
接口:泛指供别人调用的方法或函数。
区别
在语法上:
- 抽象类可以提供成员方法的实现细节,借口只包含Public abstract方法。即接口比抽象类更抽象。
- 抽象类的成员变量可以是各种类型,而接口的成员变量只能为public static final类型。
- 一个类只能继承一个抽象类,却可以的实现多个接口。
在应用上:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码。
下面一个例子可以帮我们更好地理解:
package work3;
public abstract class Door {
abstract void close();
abstract void open();
}
package work3;
public interface Lock {
void lockUp();
void openLock();
}
packe work3;
public class TestDoor {
public static void main(String[] args) {
TheftProofDoor td = new TheftProofDoor();
td.close();
td.lockUp();
td.openLock();
td.open();
}
}
package work3
public class TheftProofDoor extends Door implements Lock{
@Override
void close() {
System.out.println("门关了,请走");
}
@Override
void open() {
System.out.println("门开了,请进");
}
@Override
public void lockUp() {
System.out.println("锁上了");
}
@Override
public void openLock() {
System.out.println("开锁了");
}
}
输出结果:门关了,请走
锁上了
开锁了
门开了,请进
总结
抽象类的功能要超过接口,是对事物的抽象,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。
接口在功能上会弱化许多,是对行为的抽象,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。