java 中,abstract 类和普通类有什么区别?
在Java中,抽象类(abstract class)和普通类有以下主要的区别:
实例化:普通类可以直接实例化,而抽象类不能被直接实例化。你只能实例化一个抽象类的非抽象子类。
抽象方法:抽象类可以声明抽象方法(没有具体实现的方法,只有方法签名),普通类则不能。任何继承抽象类的子类都必须提供抽象方法的具体实现,除非该子类也是抽象类。
完整性:抽象类常常代表一种“不完整”的类型,它可能含有一些未完全定义的行为(即抽象方法)。然而,普通类必须是完整的,需要实现所有的方法。
例如:
public abstract class Animal {
public abstract void makeSound(); // 抽象方法
}
public class Dog extends Animal {
@Override
public void makeSound() { // 提供抽象方法的具体实现
System.out.println("Woof");
}
}
其中Animal是一个抽象类,有一个抽象方法makeSound()。Dog是一个普通类,它继承自Animal,并且提供了makeSound()方法的具体实现。你不能创建一个Animal的实例,但可以创建一个Dog的实例。