一、接口和抽象类的定义
接口:
- 可以看作抽象类的变体;
- 接口中的所有方法都是抽象的;
- 接口中的成员变量都是static final类型;
- 接口可以间接实现多重继承;
抽象类: 类中有方法声明为abstract(抽象方法)的类。
- 可以有私有方法或者私有变量;
- 类中的抽象方法不能包含方法体;
- 子类实现方法必须含有相同或者耕地的访问级别(public->protected->private);
- 抽象方法被abstract修饰
二、接口和抽象类的区别
- 实现: 接口中没有方法的实现,java1.8之后可以定义default方法体;抽象类中可以定义方法和实现方法。
- 关键字: 接口通过interface 关键字定义,使用implements关键字来实现接口;抽象类使用 abstract 关键字定义,子类使用extends关键字来继承。
- 构造器: 接口不能有构造器;抽吸类可以有构造器。
- **与正常类区别:**接口与类完全不同;抽象类是一种补能实例化的特殊类。
- 多继承: 接口可以继承一个或多个接口;抽象类只能继承一个类。
- 访问修饰符: 接口默认修饰符是public,成员变量默认static final;抽象方法可以有public,protected,default修饰。
- main方法: 接口没有main方法,不可以直接运行;抽象方法可以有main方法。
- 运行速度: 接口稍慢(因为需要时间寻找在类中实现的方法);抽象类运行速度较快。
- 强调点: 接口强调特定功能的实现;而抽象类强调所属关系。
- 成员变量: 接口成员变量默认为public static final,必须赋初值,不能被修改;抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值。
- 成员方法: 接口中成员方法都是public,abstract;抽象类中抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
三、接口和抽象类的相同点
- 都不能实例化;
- 接口的实现类或抽象类的子类只有实现了各自其中的方法后,才能被实例化。
四、接口和抽象类的使用
**接口:**被用于常用的功能,便于之后的维护和添加删除,不适用于功能累积
**抽象类:**充当公共类,不适用于之后的代码修改,适用于功能累积。