抽象类
1.抽象类的概念
1.什么是抽象
“抽象”在编程中通常指的是从具体事物中提取出共同特性或行为,忽略掉细节和差异,形成一个更高层次的、更一般的概念或表示。这种过程允许我们关注于事物的本质,而不是具体的实现细节。
2.为什么要抽象
Java中的抽象类(Abstract Class)是一种特殊的类,它不能被实例化,即不能创建该类的具体对象。抽象类的主要目的是为子类提供一个通用的模板,定义一些子类共有的属性和方法,同时允许子类根据自身需求实现或重写这些方法。抽象类之所以要抽象,主要有以下几个原因:
- 强制实现方法:
抽象类可以包含抽象方法(使用abstract
关键字修饰的方法,没有方法体)。当子类继承抽象类时,必须实现(重写)抽象类中所有的抽象方法,除非子类也被声明为抽象类。这一特性强制了子类必须提供某些方法的具体实现,确保了类的行为一致性。 - 代码复用:
抽象类可以包含非抽象方法(即普通方法),这些方法为子类提供了通用的实现,避免了代码重复。子类可以直接使用这些方法,也可以根据需要重写它们。 - 定义接口标准:
在Java中,抽象类可以作为一组接口的集合,定义了接口之间的契约,但同时又提供了部分实现。这使得抽象类在接口和实现类之间起到了桥梁的作用,既定义了行为标准,又提供了一定的实现细节。 - 限制实例化:
由于抽象类不能被实例化,它主要用于被其他类继承。这种限制确保了抽象类仅仅是一个模板或基类,而不是一个可以独立使用的对象。 - 设计灵活性:
通过使用抽象类,开发者可以设计出更加灵活和可扩展的系统。抽象类允许在将来添加新的子类,而不需要修改现有的代码。这种设计方式符合开闭原则(对扩展开放,对修改关闭),有助于维护系统的稳定性和可维护性。 - 提高代码可读性:
抽象类通过其结构和命名,为系统提供了清晰的层次结构和功能划分,使得代码更加易于理解和维护。
2.抽象类,实现类,接口的区别
虽然抽象类和接口都可以实现抽象化和多态性,但是它们在一些细节上有所不同。以下是抽象类和接口的区别:
2.1 实现方式
抽象类是一种特殊的类,需要通过继承它来使用。接口是一种纯抽象的类型,需要通过实现它来使用。
2.2 方法类型
抽象类中的方法可以是抽象的或者非抽象的,而接口中的方法都是抽象的。
2.3 成员变量
抽象类中可以有普通成员变量,也可以有静态成员变量,而接口中只能有常量。
2.4 构造方法
抽象类中可以有构造方法,而接口中不能有构造方法。
2.5 访问修饰符
抽象类中的成员变量和成员方法可以有public、protected、default、private四种访问修饰符,而接口中的成员变量和成员方法只能有public访问修饰符。
3.抽象类的好处
1、抽象类最根本的作用,还是提高代码的规范性和可维护性。
2、抽象类一般是作为父类,让子类继承的。所以它可以将子类的共有的一些属性和方法写入抽象类中,以便子类使用(除抽象方法不能直接使用)。这一点跟继承特性是一样的。
3、抽象类中可以定义抽象方法。这也是实际应用中最重要的一点。抽象方法就是当父类知道有一些方法子类必须实现或者要有,但每一个子类的对于这个方法的具体实现都不同,那么,就把这个方法定义为抽象的。不规定具体实现内容。
这样子类在继承后,知道这个方法自己必须要去实现。