Skip to content

抽象类

抽象类(Abstract Class)是面向对象编程中的一个概念,它是一种不能被直接实例化的类,主要用来作为其他类的基类,提供通用的属性和方法,同时可以定义一些必须由子类实现的抽象方法

抽象类只有以下属性和正常的类不同:

构造方法

抽象类存在构造方法,但是无法实例化。虽然抽象类不能被实例化,但子类实例化时会调用父类构造函数

java
abstract class Animal {}
Animal a = new Animal(); // ❌ 编译错误

抽象方法

抽象类中不一定有抽象方法,但是如果有抽象方法,那么这个类必须是抽象类。

抽象方法不能有方法体,并且以;结尾

java
abstract class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    // 抽象方法(没有方法体)
    public abstract void makeSound();

    // 普通方法
    public void sleep() {
        System.out.println(name + " is sleeping");
    }
}

非抽象类继承抽象类,要求必须将抽象方法进行实现/重写

java
// 子类必须实现抽象方法
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println(name + " says: Woof Woof!");
    }
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println(name + " says: Meow!");
    }
}

abstract关键字

  • abstract关键字不能和private共存:因为私有成员无法被继承
  • abstract关键字不能和final共存:被final修饰无法再被修改
  • abstract关键字不能和static共存:静态成员无法被继承