抽象类与接口的区别
abstract class(抽象类)和interface(接口)有什么异同?
相同:都不能被实例化。interface实现类及abstrct class的子类都必须要实现已经声明
的抽象方法。
不同:1、interface中只允许定义常量和抽象方法,而abstract class中可定义普通方法和
抽象方法。
2、interface需要实现,要用implements,而abstract class需要继承,要用extends。
3、一个类可以实现多个interface,但一个类只能继承一个abstract class。
4、interface强调特定功能的实现,而abstract class强调所属关系。
使用实例说明:接口与抽象类的区别。
package abstractTest2;
//接口,只制定规范
public interface ZhuXi {
public void faZhanJingji();
public void shouFuTaiWan();
public void daBaiMeiGuo();
}
// 接口是需要实现的,而抽象类需要继承的
package abstractTest2;
//抽象类,有选择的去实现各种东西,但不能实例化,具体方法可以被子类重写
public abstract class ZongLi implements ZhuXi{
public void faZhanJingji() {
}
}
package abstractTest2;
//最终用的都是类,该实现的都去实现
public class GongZhu extends ZongLi {
public void shouFuTaiWan() {
}
public void daBaiMeiGuo() {
}
}
总结:接口有比抽象类更好的特性:
1.可以被多继承
2.设计和实现完全分离
3.更自然的使用多态
4.更容易搭建程序框架
5.更容易更换实现
所以现在都提倡优先使用接口,而且在jdk8之后,抽象类的功能都可以在接口中实现。