Java 中抽象类和普通类的区别是什么?(超详细)

更新时间 2023-04-03 19:53:51

Java 中的抽象类和普通类有以下区别:

  1. 实例化:抽象类不能被实例化,即不能创建对象。只有通过继承抽象类并实现其抽象方法,才能创建该抽象类的实例。普通类可以直接实例化,创建对象。
  2. 抽象方法:抽象类中可以定义抽象方法,抽象方法只有方法签名,没有方法体。抽象方法必须在具体的子类中被实现。普通类中只能定义具体的方法实现,不允许定义抽象方法。
  3. 继承:抽象类可以被继承,子类可以继承抽象类中的属性和方法,并根据需要重写其中的抽象方法。普通类也可以被继承,但是子类不能继承其私有属性和方法。
  4. 多态:抽象类的引用可以指向其子类的对象,通过抽象类的多态性可以实现对一组具有相似特征的对象的操作。普通类也可以实现多态性,但需要通过接口或者父类实现。

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

public abstract class Animal {
    protected String name;

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

    public abstract void speak();
}

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

    @Override
    public void speak() {
        System.out.println("汪汪汪");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("旺财");
        dog.speak(); // 输出:汪汪汪
    }
}

在上面的代码中,Animal 类是一个抽象类,其中定义了一个抽象方法 speak(),并且包含一个实例变量 name。Dog 类继承了 Animal 类,并重写了 speak() 方法。在 Main 类中,通过 Animal 类的引用指向 Dog 类的实例对象,并调用 speak() 方法实现了多态性的应用。