Java 接口http://www.runoob.com/java/java-interfaces.html
Java 抽象类http://www.runoob.com/java/java-abstraction.html
一、抽象类(abstract)
1、抽象类不能被实例化,如果实例化就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
2、抽象类中不一定含有抽象方法,但是有抽象方法的类一定是抽象类。
3、抽象类中的抽象方法只能声明,不包含方法体,就是不会给出方法的具体实现。
4、构造方法、类方法(用static修饰的方法)不能声明为抽象方法。
5、抽象类的子类必须给出抽象类中抽象方法的具体实现,除非子类也是抽象类。
二、接口(interface)
1、接口可以多继承
2、接口中的方法必须是public abstract,即便不写默认也是。
3、接口里面不包含方法的具体实现,即接口中的所有方法都必须是抽象方法。
4、类继承接口必须实现接口里面声明的全部方法,除非该类是抽象类。
5、接口不可以被实例化,但可以被实现类创建。
三、抽象类与接口的相同点
1、两者都是抽象类,都不能被实例化。
2、接口的实现类及抽象类的子类都必须实现已经声明的抽象方法(当然啦,除非接口的实现类及抽象类的子类也是抽象的)
四、抽象类与接口的区别
1、抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2、抽象类中的成员变量可以是各种类型的,但是接口中的只能是public static final类型的。
3、一个类只能继承一个抽象类,而但是可以实现多个接口。
4、接口需要实现,用implements;而抽象类需要继承,用extends。
5、接口中的方法必须都实现,而抽象类中的方法可以选择性的实现。
五、什么时候使用抽象类和接口
1、如果拥有一些方法并且想让它们中的一些默认实现,就用抽象类。
2、如果想实现多继承,就必须要用接口。由于Java中不支持多继承,子类不能够继承多个类,但可以实现多个接口。
3、如果基本功能不断改变,那么要使用抽象类。因为不断改变功能时,用接口的话,就需要改变所有实现了该接口的类。