详述抽象抽象类与接口的区别
抽象类
抽象类:用abstract修饰的类是抽象类
抽象方法:用abstract修饰的方法是抽象方法,方法只有声明没有方法体
特点:
- 抽象类不能被实例化,即不能用关键字new来创建对象
- 抽象类的子类必须实现该类的所有抽象方法,否则该子类也是抽象类
- 抽象类中抽象方法是多态的一种表现形式
- 可以有具体的方法,该方法可以用子类调用
注意:abstract不能与final、private、static一起使用
接口
接口:是抽象方法的集合,用interface修饰
特点:
- 接口内只包括常量(默认为 public static final 修饰)、抽象方法(必须是public)和内部类
- 不能创造对象,也没有构造方法
- 接口只能继承接口,可以继承多个接口,接口之间用,隔开
- 一个类实现一个接口,但没有实现接口中所有抽象方法,则这个类为抽象类
- 多个接口中定义了相同的抽象方法,只实现其中的一个就行
- Java8开始,接口中可以添加一个或多个由static修饰的非抽象方法,由接口或实现类直接调用(静态方法实现)
抽象类与接口的区别
区别 | 抽象类 | 接口 |
---|---|---|
关键字 | abstact | interface |
构造方法 | 有 | 没有 |
继承 | 单继承 | 多继承 |
实现方法 | extends | implements |
成员变量 | 任何合法的成员变量 | 只能为public static finnal 的变量 |
方法 | 任何合法的方法 | 只有抽象方法,JDK8可以有static或default修饰的具体方法 |