java中,抽象类和接口的区别对于初学者很容易记混淆。下边就从以下几个角度来梳理以下去区别:
1,方法的角度:
抽象类的方法可以是抽象的,也可以是不抽象的;抽象类的抽象方法必须被子类重写;
抽象类中可以包含已经实现的方法;
接口中不能包含已被实现的方法,其声明的方法由实现它的类来重写。
2,继承和实现的角度:
2.1 抽象类可以实现接口,接口也可以实现接口(但是接口必须是以关键字extends来继承接口);
interface Work{ }
interface Program extends Work{ }
abstract class Person{ }
abstract class Engineer extends Person implements Program{ }
2.2 抽象类可以继承抽象类,但是接口不可以继承抽象类(因为superinterface must be an interface)。
2.3 子类中的定义抽象方法不能与父类的抽象方法同名;但是如果子类和父类都没有实现该方法,也是可以声明同名的抽象方法。
3,实例化的角度:
抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
4,修饰符的角度
abstract不能与final并列修饰同一个类。
abstract 不能与private、static、final或native并列修饰同一个方法。
接口中的成员变量默认被声明为public static final的
接口中的方法只能被声明为public的.
5,内部类的角度
抽象类中可以定义接口,也可以定义抽象类;
接口中可以定义抽象类,也可以定义接口;
实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。