接口里只能包含抽象方法,不包含已经提供实现的方法;抽象类则可以完全能包含普通方法。
接口里不能定义静态方法,抽象类里可以定义静态方法。
接口里只能定义静态敞亮属性,不能定义普通属性;抽象类里则既可以定义普通属性,也可以定义静态fulei敞亮属性
接口不包含构造器,抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而让其子类调用这些构造器来完成属于
抽象类的初始化操作。
接口里不能包含初始化块,但抽象类则完全可以包含初始化块
一个类最多只能有一个直接父类,包括抽象类;但一个类可以实现多个接口;通过实现多个接口可以弥补java单继承的
不足`
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例:
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
// abstract method
abstract void service(ServletRequest req, ServletResponse res);
void init() {
// Its implementation
}
// other method related to Servlet
}
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。以Externalizable接口为例:
public interface Externalizable extends Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}