抽象类的定义和使用
抽象类只是比普通类多一些抽象方法,所谓的抽象类就是指声明二为实现的方法(没有方法体),所有抽象方法要求使用abstract关键字来定义,并且抽象方法所在的类也一定要使用abstract关键字来 定义,表示抽象类
抽象类的使用原则
- 所有的抽象类必须有子类
- 抽象类的子类必须覆写抽象类的所有抽象方法,否则子类也为抽象类
- 抽象类的实例化可以通过对象多态性利用子类为其实例化
- private和abstract不能同时使用
抽象类的相关规定
- 抽象类也允许提供构造方法,并且子类照样遵循对象实例化流程,实例化子类一定先调用父类的构造方法
- 如果父类没有无参构造,那么子类必须使用super明确指出使用父类那个构造方法
- 抽象类中允许不定义任何的抽象方法,但是此时抽象类依然无法直接创建实例化对象
- 抽象类一定不能使用final声明,因为使用final声明的类不允许有子类;而抽象类必须有子类;相应的,抽象 方法也不能使用private定义,因为抽象方法必须要能被覆写
- 抽象类也分为内部抽象类和外部抽象类。内部抽象类中也可以使用static定义来描述外部抽象
接口的定义与使用
抽象类与普通类相比最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限,如果既要约定子类的实现,又要避免单继承局限就要使用接口
接口的基本概念
接口定义:接口就是抽象方法和全局常量的集合,在Java中接口使用interface关键字定义
子类如果要想使用接口,那么就必须使用implements关键字来实现接口,同时,一个子类可以实现多个接口
可以使用接口来实现多继承的概念,对于接口的子类(不是抽象类)必须覆写接口中的全部抽象方法。随后可以 利用子类的向上转型通过实例化子类来得到接口的实例化对象
接口使用的限制
- 接口中只允许public权限,其中public abstract可省略
- 当一个子类即需要实现接口又需要继承抽象类时,请先使用extends继承一个抽象类,而后使用implements 实现多个接口
- 一个抽象类可以使用implements实现多个接口,但是接口不能继承抽象类
- 一个接口可以使用extends继承多个父接口
- 接口可以定义一系列的内部结构,包括:内部普通类,内部接口。其中,使用static定义的内部 接口就相当于一个外部接口
接口的应用
- 定义操作标准
- 标识能力
- 在分布式开发中暴露远程服务方法