跳至主要內容

抽象类和接口

岁杪二四...大约 2 分钟面向对象学习笔记

首先看一个案例,当需要做一个绘制图形的类,存在以下继承结构:

Shape是什么形状? 其中,RectangleSquare……这几个子类是描述的某一具体的形状,但 Shape类不是具体的,而是抽象的。

抽象类

我们称像 Shape这样表达某一种概念的类叫做抽象类


抽象方法

抽象方法是表达概念而无法实现具体代码的函数

抽象方法是使用 abstract关键字修饰的成员方法,抽象方法在定义时不需要实现方法体,抽象方法的定义格式如下:

abstract 返回值类型 方法名称(参数);

注意

使用 abstract关键字修饰的抽象方法不能使用 private修饰,因为抽象方法必须被子类实现,如果使用 private声明,则子类无法实现该方法


当一个类包含了抽象方法,则该类必须是抽象类,抽象类与抽象函数一样必须使用 abstract关键字进行修饰。抽象类的定义格式如下:

public abstract class 抽象类名称{
      public abstract 返回值类型 方法名称(参数);
}

注意

若一个类没有声明为抽象类但包含抽象方法会无法编译

抽象类的定义规则如下:

  • 包含抽象方法的类必须是抽象类
  • 抽象类和抽象方法都要使用 abstract关键字进行声明
  • 抽象方法只需要声明而不需要实现
  • 如果一个抽象类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法

抽象类无法实例化对象,但是可以定义变量,任意继承了抽象类的非抽象类的对象可以付给这个变量

public static void main(String args[]){
     Square s = new Square();
     Shape c = s;   //这是可行的
}

重要

无法实例化的抽象类有什么用? 因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”

接口

如果一个抽象类中所有的方法都是抽象类,则该类可定义为接口。接口是Java中最重要的概念之一

类与类是单继承关系,即一个子类只能有一个直接父类;但类与接口是多实现关系,即一个类可以实现多个接口;而接口与接口是多继承关系,即一个接口可以同时继承多个接口

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.2.0