面向对象进阶--抽象类与接口

307 阅读5分钟

面向对象编程(OOP)是一种编程范式,它使用“对象”来设计应用程序和程序。以下是面向对象编程的一些进阶概念:

  1. 抽象:抽象是面向对象编程中的一个重要概念。它涉及将现实世界的事物转化为程序可以处理的形式。通过抽象,我们可以隐藏对象的内部细节,只暴露必要的接口给外部。
  2. 封装:封装是指隐藏对象的内部状态并实现细节,只通过对象提供的方法来访问和修改内部状态。这可以提高软件的健壮性,减少错误,并提高安全性。
  3. 继承:继承是从基类创建派生类的过程。派生类继承了基类的所有属性和方法,还可以定义新的属性和方法。这使得代码可以重用,降低了代码的复杂性。
  4. 多态:多态是指允许一个接口多种形态存在的现象。在面向对象编程中,多态让程序员使用相同的词语表示不同的类型和操作,比如方法或操作符的重载和重写。

在Java面向对象编程中,"抽象"是一个非常重要的概念。抽象是从具体事物中抽取出来的相对独立的各个方面、属性、关系等。

在编程语境下,抽象通常指的是一种能力,让我们可以处理那些不关心具体实现,只关心行为的对象。Java提供了两种抽象机制,分别是抽象类和接口。

  1. 抽象类:抽象类是不能被实例化的类,通常包含一个或多个抽象方法。抽象方法是没有具体实现的方法,它们的实现由抽象类的子类提供。抽象类通常用于表示一种抽象的概念或者基础类,其它类可以继承这个抽象类并提供具体实现。
  2. 接口:接口是一种完全抽象的类,它只包含方法的声明,但没有方法的实现。实现接口的类需要提供接口中声明的所有方法的实现。接口通常用于定义一种行为或者能力,类可以实现一个或多个接口来表示它具有这些行为或能力。

抽象的作用主要是为了提高代码的复用性和可维护性,通过抽象可以将变化和不变的部分分离,使得代码更加清晰、简洁和易于理解。

抽象类和接口在Java面向对象编程中有以下主要区别:

  1. 默认方法实现:抽象类可以包含具体的方法实现,即包含有方法体的方法,而接口直到Java 8之前都只能声明方法但不能包含实现。然而,从Java 8开始,接口中可以有默认方法和静态方法的实现。
  2. 状态维护:抽象类可以有字段,因此可以保存状态,而接口不能有实例字段。
  3. 继承和实现:一个类可以实现多个接口,但只能继承一个抽象类。
  4. 构造函数:抽象类可以有构造函数,而接口不能有构造函数

创建抽象类和接口的步骤如下:

创建抽象类:

  1. 使用abstract关键字修饰类,例如:public abstract class MyClass {}
  2. 在抽象类中定义抽象方法,抽象方法没有方法体,只有方法签名,使用abstract关键字修饰方法,例如:public abstract void myMethod();

创建接口:

  1. 使用interface关键字定义接口,例如:public interface MyInterface {}
  2. 在接口中定义方法,这些方法默认为抽象方法,不需要使用abstract关键字修饰,例如:void myMethod();

详细抽象类步骤如下:

  1. 定义抽象类:使用abstract关键字修饰类,声明这是一个抽象类。例如:

image.png

  1. 定义抽象方法:在抽象类中,可以定义一些抽象方法。抽象方法只有声明,没有实现。使用abstract关键字修饰方法,表示该方法是抽象的。例如:

image.png

  1. 创建子类并实现抽象方法:创建一个继承自抽象类的子类,并实现抽象类中定义的所有抽象方法。例如:

image.png

后续可以这样实例化

image.png

详细接口步骤如下:

  1. 定义接口:使用interface关键字定义接口。接口中可以包含常量和抽象方法。例如:

image.png

  1. 实现接口:创建一个类,让它实现接口,并提供接口中定义的所有方法的实现。使用implements关键字表示实现接口。例如:

image.png

后续可以这样实例化:

image.png

需要注意的是,抽象类和接口都不能被实例化,需要创建它们的子类或实现类来提供具体实现。子类或实现类需要实现抽象类或接口中定义的所有抽象方法。

调用抽象类和接口的方法取决于具体的使用场景。一般来说,抽象类和接口不能直接实例化,因为它们是不完整的类或方法集合,需要子类或实现类来提供具体的实现。

在调用抽象类或接口的方法时,实际上是通过它们的子类或实现类来调用。首先,需要创建一个子类或实现类,并实现抽象类或接口中定义的所有抽象方法。然后,可以创建子类或实现类的实例,并调用它们的方法。