Java 中抽象类和普通类的区别是什么?(超详细)
Java 中的抽象类和普通类有以下区别:
- 实例化:抽象类不能被实例化,即不能创建对象。只有通过继承抽象类并实现其抽象方法,才能创建该抽象类的实例。普通类可以直接实例化,创建对象。
- 抽象方法:抽象类中可以定义抽象方法,抽象方法只有方法签名,没有方法体。抽象方法必须在具体的子类中被实现。普通类中只能定义具体的方法实现,不允许定义抽象方法。
- 继承:抽象类可以被继承,子类可以继承抽象类中的属性和方法,并根据需要重写其中的抽象方法。普通类也可以被继承,但是子类不能继承其私有属性和方法。
- 多态:抽象类的引用可以指向其子类的对象,通过抽象类的多态性可以实现对一组具有相似特征的对象的操作。普通类也可以实现多态性,但需要通过接口或者父类实现。
下面是一个抽象类的示例代码:
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()
方法实现了多态性的应用。