📜  抽象类与非抽象类 (1)

📅  最后修改于: 2023-12-03 14:54:37.378000             🧑  作者: Mango

抽象类与非抽象类

在面向对象编程中,类是一种定义对象基本属性和行为的蓝图。类可以被实例化为具体的对象,而对象可以调用类中定义的方法和属性。在类的继承关系中,有两种不同的类: 抽象类和非抽象类。本文将会介绍抽象类和非抽象类的概念、特点和区别。

抽象类

抽象类是一种特殊的类,其主要用途是为派生类提供一个公共的接口。抽象类不能被实例化,它只能被用作基类,而且必须被继承。抽象类通常包含一些抽象方法,这些方法没有具体的实现,只有具体的派生类才可以提供实现。

定义一个抽象类需要在类的定义前加上 abstract 关键字。下面是一个抽象类的示例:

public abstract class Shape {
    protected int x;
    protected int y;

    public Shape(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public abstract void draw();
}

在上面的代码中,我们定义了一个名为 Shape 的抽象类,并且定义了一个抽象方法 draw。这个方法没有具体的实现,因为不同的形状有不同的绘制方式,具体的绘制方式需要由子类来进行实现。

非抽象类

非抽象类是普通的类,它可以被实例化。非抽象类可以包含抽象方法,但是它必须要实现所有的抽象方法,否则这个类还是被认为是抽象的。

下面是一个非抽象类的示例:

public class Circle extends Shape {

    private int radius;

    public Circle(int x, int y, int radius) {
        super(x, y);
        this.radius = radius;
    }

    @Override
    public void draw() {
        System.out.println("Draw Circle with radius " + radius + " at (" + x + ", " + y + ")");
    }
}

在上面的代码中,我们定义了一个名为 Circle 的类,它继承自 Shape 抽象类,实现了 Shape 类中的抽象方法 draw。我们为 Circle 类定义了一个私有属性 radius,并在构造函数中对它进行了初始化。

区别

抽象类和非抽象类有以下区别:

  • 抽象类不能被实例化,而非抽象类可以被实例化。
  • 抽象类必须被继承,否则它没有任何作用,而非抽象类可以独立存在。
  • 抽象类可以包含抽象方法和非抽象方法,而非抽象类只能包含非抽象方法。非抽象类可以包含抽象方法,但是必须要实现所有的抽象方法才能被实例化。
  • 抽象类可以用作基类,被子类继承,并重写其中的抽象方法,而非抽象类只能被实例化。

总之,抽象类是一种定义公共接口的方式,而非抽象类是一种实现具体功能的方式。在实际编程中,我们需要根据具体的需要选择使用抽象类还是非抽象类。