之前我们详细的学习了java中的继承,java中的继承是单继承的,这样就会导致一个问题,如果一个类同时想调用另外两个类的相关内容,作为单继承是无法实现的,怎么办呢?java提供了另一种方式-接口来解决这个问题。


1、抽象

抽象本身就是一种很抽象的概念。

1.1 abstract关键字

注意点

  1. 不可以修饰私有方法,静态方法(私有方法和静态方法都不可以被继承)
  2. abstract不能用来修饰属性、构造器等结构
  3. 不可以修饰final

    1.2 抽象类

    JAVA接口和抽象类详解 - 掘金
    abstract修饰的类称之为抽象类。如果一个类中包含有抽象方法,那么该类一定是抽象类。但是抽象类不一定包含有抽象方法。
    抽象类就是为了继承而存在的,如果定义了抽象类而不去继承它,那么操作就是毫无意义的。
    注意点

  4. 抽象类不能实例化对象

  5. 抽象类中一定有构造器,便于子类实例化的时候进行调用
  6. 子类继承抽象类后,必须要重写抽象类中的所有抽象方法。非抽象方法可以不重写

    1.3 抽象方法

    抽象方法必须是public或者protected。默认情况下是public
    注意点

  7. 抽象方法只有方法的声明,但是没有方法的实现

  8. 包含抽象方法的一定是抽象类,但是抽象类不一定有抽象方法
  9. 只有子类重写了父类的抽象方法,子类才可以实例化对象,否则子类也是抽象类

    1.4 举例

    IO流中的InputStreamOutputStream

    2、接口

    Java中的继承是只支持单继承的,为了提高拓展性,提供了接口接口是对一种行为的抽象,表示一种能力,一种规范。接口是两个并行的结构
    关键字 interface
    成员
  • 全局常量public static final可以省略不写
  • 静态方法public abstract可以省略

特点 接口不可以实例化对象
调用 通过类去实现接口来调用

  • 当且仅当类重写了接口中的所有抽象方法,该类才可以去实例化对象
  • 如果没有,则该类为抽象类,仍然不可以实例化对象

多实现性

  • 一个类可以实现多个接口,比如子弹既具有攻击性,又具有飞行的能力
  • 如果需要先继承某类然后实现某个接口,则先写继承再写实现


3、内部类

👮抽象类、接口和内部类 - 图1