导入
今天在看java设计模式第二版时候,遇到一个问题,让写出接口和抽象类的三点区别,想了一下,进入识盲区了,当初在学完java的抽象类与接口是也没加以思考,在写代码时也是更具代码写结构,却没有更加深入的思考,导致现在突然遇到一个问题一时无法快速回答上来。让我知道了自己基础原来是这么的差,也让我明白平时思考的重要性。
原题分享
(可以自己尝试思考思考,本书(java设计模式第二版)提供的答案在文章后面)
看了引入与原题思考,我想你也经过思考。让我来具体看看它们两者之间的区别吧。
下面内容部分
原文链接: javacodegeeks 翻译: ImportNew.com - jessenpan
译文链接: http://www.importnew.com/12399.html
抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:
接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable接口为例:
public interface Externalizable extends Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
当你实现这个接口时,你就需要实现上面的两个方法:
public class Employee implements Externalizable {
int employeeId;
String employeeName;
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
employeeId = in.readInt();
employeeName = (String) in.readObject();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(employeeId);
out.writeObject(employeeName);
}
}
抽象类和接口的对比
什么时候使用抽象类和接口
- 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
- 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
Java8中的默认方法和静态方法
Oracle已经开始尝试向接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异。现在,我们可以为接口提供默认实现的方法了并且不用强制子类来实现它。这类内容我将在下篇博客进行阐述。
上面内容转载:
原文链接: javacodegeeks 翻译: ImportNew.com - jessenpan
译文链接: http://www.importnew.com/12399.html