Java中抽象类的学习

BingBing-8888 / 2024-08-31 / 原文

抽象类


目录
  • 抽象类
    • 抽象类的概念
    • 抽象类的好处
      • 1. 代码复用与简化
      • 2. 强制实现特定方法
      • 3. 隐藏实现细节
      • 4. 支持扩展性和灵活性
      • 5. 公共服务功能
      • 6. 稳定的抽象层依赖

抽象类的概念

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

在 Java 语言中使用 abstract class 来定义抽象类。如下实例:

// 定义一个抽象类Shape  
abstract class Shape {  
    // 抽象方法,没有实现体  
    public abstract void draw();  
}  
  
// 定义一个继承自Shape的子类Circle  
class Circle extends Shape {  
    // 实现父类中的抽象方法  
    @Override  
    public void draw() {  
        System.out.println("Inside Circle::draw() method.");  
    }  
}  
  
// 定义一个继承自Shape的子类Rectangle  
class Rectangle extends Shape {  
    // 实现父类中的抽象方法  
    @Override  
    public void draw() {  
        System.out.println("Inside Rectangle::draw() method.");  
    }  
}  
  
// 测试类  
public class TestAbstractClass {  
    public static void main(String[] args) {  
        // 创建Circle对象  
        Shape circle = new Circle();  
        circle.draw();  
  
        // 创建Rectangle对象  
        Shape rectangle = new Rectangle();  
        rectangle.draw();  
    }  
}

抽象类的好处

抽象类的好处主要体现在以下几个方面:

1. 代码复用与简化

  • 模板化实现:抽象类提供了一种模板化的实现方式,通过定义通用的属性和方法,使得子类可以继承这些共同的属性和方法,从而减少重复代码,提高代码复用性。
  • 简化设计:抽象类可以将具有共同特征和行为的类进行抽象,简化代码的设计和维护。它作为类层次结构中的顶层类,定义了通用的属性和方法,子类可以继承并实现具体的功能。

2. 强制实现特定方法

  • 约束子类行为:抽象类可以定义抽象方法,要求子类必须实现这些方法,从而约束子类的行为。这有助于确保子类遵循一定的接口规范,实现相应的功能。
  • 提高代码一致性:通过定义抽象方法,可以确保子类具有相同的方法签名,提高代码的一致性和可预测性。

3. 隐藏实现细节

  • 提高封装性:抽象类可以将一些共同的实现细节放在抽象类中,对子类隐藏起来,从而提高代码的封装性和安全性。

4. 支持扩展性和灵活性

  • 扩展方式:抽象类提供了一种扩展的方式,当需要在类层次结构中添加新的功能时,可以通过继承抽象类并实现抽象方法来完成。这种方式比直接修改已有类更加灵活,并能保持较好的代码组织结构。
  • 多重继承效果:一个类可以同时继承一个抽象类并实现多个接口,从而实现多重继承的效果,提高代码的灵活性和可扩展性。

5. 公共服务功能

  • 提供公共服务:抽象类可以包含非抽象方法,这些方法有具体的实现。子类可以直接继承和使用这些非抽象方法,实现一些公共服务功能,提高代码的复用性。

6. 稳定的抽象层依赖

  • 便于架构复用:抽象类可以建立稳定的抽象层依赖,便于架构层面的整体复用。通过定义稳定的抽象层,可以在不修改现有代码的基础上,通过添加新的子类来扩展系统的功能。

综上所述,抽象类在面向对象编程中扮演着重要的角色,它通过提供模板化实现、强制实现特定方法、隐藏实现细节、支持扩展性和灵活性、提供公共服务功能以及建立稳定的抽象层依赖等方式,极大地提高了代码的可维护性、复用性、一致性和可扩展性。