📅  最后修改于: 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
,并在构造函数中对它进行了初始化。
抽象类和非抽象类有以下区别:
总之,抽象类是一种定义公共接口的方式,而非抽象类是一种实现具体功能的方式。在实际编程中,我们需要根据具体的需要选择使用抽象类还是非抽象类。