之前我们详细的学习了java中的继承,java中的继承是单继承的,这样就会导致一个问题,如果一个类同时想调用另外两个类的相关内容,作为单继承是无法实现的,怎么办呢?java提供了另一种方式-接口来解决这个问题。
1、抽象
1.1 abstract
关键字
注意点
:
- 不可以修饰私有方法,静态方法(私有方法和静态方法都不可以被继承)
- abstract不能用来修饰属性、构造器等结构
-
1.2 抽象类
JAVA接口和抽象类详解 - 掘金
被abstract
修饰的类称之为抽象类
。如果一个类中包含有抽象方法,那么该类一定是抽象类。但是抽象类不一定包含有抽象方法。抽象类
就是为了继承而存在的,如果定义了抽象类而不去继承它,那么操作就是毫无意义的。注意点
: 抽象类不能实例化对象
- 抽象类中一定有构造器,便于子类实例化的时候进行调用
子类继承抽象类后,必须要重写抽象类中的所有抽象方法。非抽象方法可以不重写
1.3 抽象方法
抽象方法必须是
public
或者protected
。默认情况下是public
的注意点
:抽象方法只有方法的声明,但是没有方法的实现
- 包含抽象方法的一定是抽象类,但是抽象类不一定有抽象方法
- 只有子类重写了父类的抽象方法,子类才可以实例化对象,否则子类也是抽象类
1.4 举例
IO流
中的InputStream
和OutputStream
2、接口
Java
中的继承是只支持单继承的,为了提高拓展性,提供了接口
。接口
是对一种行为的抽象,表示一种能力,一种规范。接口
和类
是两个并行的结构关键字
interface
成员
- 全局常量
public static final
可以省略不写 - 静态方法
public abstract
可以省略
特点
接口不可以实例化对象调用
通过类去实现接口来调用
- 当且仅当类重写了接口中的所有抽象方法,该类才可以去实例化对象
- 如果没有,则该类为抽象类,仍然不可以实例化对象
多实现性
- 一个类可以实现多个接口,比如子弹既具有攻击性,又具有飞行的能力
- 如果需要先继承某类然后实现某个接口,则先写继承,再写实现