类的扩展(二):抽象类

  1. 怎么理解抽象类和抽象方法?
    答:

    • 抽象类:就是抽象的类,抽象类没有直接对应的对象,表达的是抽象的概念,一般是具体类的比较上层的父类。
    • 抽象方法:只有子类才知道如何实现的方法。
    • 关键字:abstract
  2. 抽象类的细节?
    答:

    • 定义了抽象方法的类必须被声明为抽象类,但抽象类可以没有抽象方法
    • 抽象类和具体类一样,可以定义具体方法、实例变量等
    • 抽象类和具体类的核心区别是:抽象类不能创建对象
    • 抽象类不能创建对象,要创建对象,必须使用它的具体子类
    • 一个类在继承抽象类后,必须实现抽象类中定义的所有抽象方法。
    • 与接口类似,抽象类虽然不能使用 new,但可以声明抽象类的变量,引用抽象类具体子类的对象
  3. 为什么需要抽象类、为什么不能定义一个空方法表示抽象的含义?
    答:

    • 引入抽象方法和抽象类,是 Java 提供的一种语法工具,对于一些类和方法,引导使用者正确使用它们。虽然从语法上抽象类不是必需的,但它能使程序更清晰,可以减少误用
    • 使用抽象方法而非空方法体,子类就知道它必须要实现该方法,而不可能忽略,若忽略 Java 编译器会提示错误。
    • 使用抽象类,类的使用者创建对象的时候,就知道必须要使用它的某个具体子类,而不可能误用不完整的父类。
    • 每个人都可能犯错,减少错误不能只依赖人的优秀素质,还需要一些机制,使得一个普通人都容易把事情做对,而难以把事情做错。抽象类就是 Java 提供的这样的一种减少犯错的机制
  4. 抽象类和接口的区别?
    答:

    • 接口中不能定义实例变量,抽象类可以
    • 抽象类和接口是配合而非替代关系,接口声明能力,抽象类提供默认实现,实现全部或部分方法
    • 一个接口经常有一个对应的抽象类。