常常搞不清抽象类和接口之间的关系,因此决定记下来php
《Thinking in Java》一书中对抽象类的定义为:html
包含了抽象方法的一个类叫做“抽象类”。若是一个类里包含了一个或多个抽象方法,类就必须指定成
abstract(抽象)。不然,编译器会向咱们报告一条出错消息。 web
其实用关键字abstract修饰的类便是抽象类,即便该类中没有用abstract修饰的抽象方法。编程
抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:svg
abstract void method_name()
抽象方法必须用 abstract 修饰,含有抽象方法的类就是抽象类,必须在类前用 abstract 修饰。
因为抽象类中含有无具体实现的方法,因此不能用抽象类建立对象。函数
由此能够看出抽象类就是为了被继承而存在的,抽象类中包含了子类的共通特性。若是定义了一个抽象类却不去继承它,至关于白白建立了这个抽象类。
同时,抽象类也跟普通类同样,能够拥有成员变量和普通的成员方法。spa
接口,英文称做interface。在软件工程中,接口泛指供别人调用的方法或者函数,是对行为的抽象。在Java中,定一个接口的形式以下:code
[public] interface InterfaceName {
}
接口中能够包含基本数据类型的数据成员和方法,须要注意的是接口中的数据成员都默认为static和final,接口中方法只能是public abstract修饰的抽象方法。
接口中的全部方法都不能有具体实现。实现接口的类必须实现接口中全部的抽象方法,一个类能够实现多个接口,经过关键字implements。xml
class className implements interface1,interface2,[...]{
}
若是抽象类实现了一个接口,该抽象类能够不实现接口中的抽象方法。htm
参数 | 抽象类 | 接口 |
---|---|---|
默认的方法实现 | 能够有默认的方法实现 | 接口彻底是抽象的。它根本不存在方法的实现 |
实现 | 子类经过extents关键字继承抽象类。若是子类不是抽象类,须要实现父类中全部声明的方法的实现 | 子类经过关键字implements实现接口,须要提供接口中全部生命方法的实现 |
构造器 | 能够有构造器 | 不能有构造器 |
与普通类的区别 | 除了不能实例化,其余的跟普通类没有任何区别 | 接口是彻底不一样的类型 |
访问修饰符 | 抽象类方法能够用public、protected和default修饰 | 接口方法只能用public修饰,成员属性只能定义为 public static final |
main方法 | 抽象类能够有main方法且能够运行 | 接口没有main方法,不能运行 |
多继承 | 抽象方法能够继承一个类或者实现多个接口 | 只能继承一个或多个接口 |
速度 | 速度比接口要快 | 接口是稍微有点慢的,由于它须要时间去寻找在类中实现的方法。 |
添加新方法 | 若是在抽象类中添加新方法,能够给该方法提供默认的实现,不须要改变如今的代码 | 在接口中添加新方法后必须改变实现该接口的类 |
http://www.importnew.com/18780.html
http://www.importnew.com/12399.html 《Java编程思想》