抽象类和普通类之间有以下区别:
-
实例化:
- 普通类可以直接实例化对象,而抽象类不能被实例化。抽象类只能作为父类被继承,子类可以实例化。
-
方法:
- 普通类可以包含普通方法和抽象方法,而抽象类可以包含抽象方法和普通方法。
- 抽象方法是没有实现的方法,必须由子类实现。普通方法有实现,可以直接被调用。
-
成员变量:
- 普通类可以包含成员变量和静态变量,而抽象类也可以包含这些变量。
-
继承:
- 普通类可以继承另一个普通类或抽象类,而抽象类只能继承自另一个抽象类或接口。
- 子类继承抽象类时,必须实现抽象类中的所有抽象方法,除非子类也是抽象类。
-
用途:
- 抽象类通常用于建模那些具有共同特征的对象,但又不能确定具体实现的类,例如动物类可以是抽象类,具体的动物如狗、猫则可以是普通类。
- 普通类则用于描述具体的对象,可以直接实例化使用。
以下是一个简单的示例代码,分别展示了抽象类和普通类的定义:
// 抽象类
abstract class Shape {
// 抽象方法,子类必须实现
abstract double area();
// 普通方法
void display() {
System.out.println("This is a shape.");
}
}
// 普通类
class Rectangle extends Shape {
double length;
double width;
// 实现抽象方法
@Override
double area() {
return length * width;
}
}
public class Main {
public static void main(String[] args) {
// 无法实例化抽象类,但可以声明引用变量
// Shape shape = new Shape(); // 错误,无法实例化
// 实例化子类对象
Rectangle rectangle = new Rectangle();
rectangle.length = 5;
rectangle.width = 3;
// 调用普通方法
rectangle.display();
// 调用实现的抽象方法
System.out.println("Area of rectangle: " + rectangle.area());
}
}
在上面的示例中,Shape
是一个抽象类,其中包含一个抽象方法 area()
和一个普通方法 display()
。Rectangle
类是 Shape
的子类,实现了 area()
方法。在 Main
类中,我们可以声明抽象类的引用变量,但不能直接实例化抽象类对象。相反,我们可以实例化子类对象,并通过子类对象调用继承的普通方法和实现的抽象方法。