相同:
都不能实例化。
不同:
属性:
接口的属性只能被public static final修饰;
抽象类属性任意;
构造方法:
接口不可定义(因为属性被final修饰属性值不可更改)
抽象类可以定义。
方法:
接口只能定义抽象方法,方法默认被public abstract修饰;
抽象类既可以定义普通方法,也可以定义抽象方法。
扩展性:
接口是多实现;
抽象类时多继承。
使用场景:
接口:只对行为抽象。
举例:猫和狗都是动物,它们都能吃,就可以把“吃”定义为一个接口,用猫类和狗 类实现这个接口,是has a的关系。
抽象类:对事物整体的抽象。
举例:子类继承了父类,但是又对父类中方法的实现不满意,那么可以在父类中修 改抽象方法(所有子类的公共方法),但是子中的代码却不需要改动。
如果一个接口中的方法做了更改,那么所有实现这个接口的实现类的非抽象方法都 必须做出相应的改动。
总结:
如果类型中要定义每一个子类都共有的内容,一般定义为抽象类;
如果类型中要定义实现类特有的方法,一般提取到接口中;
抽象类是一种模板式的定义,而接口则是一种规范的定义。