0%

Java 类的扩展(二):抽象类的本质

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

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

2. 抽象类的细节

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

3. 为什么需要抽象类,为什么不能定义一个空方法表示抽象的含义

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

4. 抽象类和接口的区别

  • 接口中不能定义实例变量(可以定义静态变量),抽象类可以
  • 抽象类和接口是配合而非替代关系,接口声明能力,抽象类提供默认实现,实现全部或部分方法
  • 一个接口经常有一个对应的抽象类
-------------------- 本文结束感谢您的阅读 --------------------