抽象类
抽象类(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共存:静态成员无法被继承
