抽象类
抽象类和抽象方法都要用abstract关键字修饰,不能直接被实例化,abstract不能修饰成员变量
abstract class 类名 {}
public abstract void eat();
抽象类不一定有抽象方法,有抽象方法的一定是抽象类或者接口
抽象类的子类要么是抽象类,要么重写抽象类中的所有方法
抽象类的成员特点
- 成员变量:既可以是变量也可以是常量
- 构造器:有,用于子类访问父类数据的初始化
- 成员方法:可以抽象也可以不抽象
抽象方法时强制要求子类做的事,非抽象方法是子类继承的事,提高代码复用性。
abstract关键字不能与以下关键字共存:
static、final
接口
接口就是Java中的interface(狭义),对外提供规则(广义)。
接口特点
- 接口用关键字interface修饰 interface 接口名 {}
- 类实现接口用implements表示 class 类名 implements 接口名 {}
- 接口不能直接被实例化,按照多态方式实例化
- 接口的子类可以是抽象类,也可以是具体类(要重写接口中的所有抽象方法)
接口的成员特点
- 成员变量只能是常量,并且是静态的公共的。修饰符public static final
- 接口没有构造器
- 成员方法只能是抽象方法 默认修饰符:public abstract
类与类,类与接口,接口与接口之间的关系
- 类与类之间只能是单继承关系或者多层继承关系;
- 类与接口之间是实现关系,可以单实现也可以多实现,可以继承一个类的同时实现多个接口;
- 接口与接口之间是继承关系,可以单继承,也可以多继承。
抽象类与接口之间的区别
- 成员区别
- 抽象类:
- 成员变量可以是变量也可以是常量,有构造器,成员方法可以抽象方法也可以非抽象方法
- 接口
- 成员变量只能是常量,没有构造器,成员方法只能是抽象方法
- 关系区别
- 类与类
- 继承,单继承
- 类与接口
- 实现,单实现,多实现
- 接口与接口
- 继承,单继承,多继承
- 设计理念
- 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
- 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。