理解抽象类
抽象类是特殊类型的类,它的主要特点在于其中的方法主要被其子类重写,每个子类都会有自己独特的实现方式。在父类中,这些方法只有声明部分存在意义,而方法主体则没有实际存在的价值。我们把这些方法称为抽象方法。在Java语法中,包含抽象方法的类就是抽象类。
定义
抽象方法:没有具体方法体的方法。
抽象类:包含抽象方法的类。
abstract关键字的使用格式
使用abstract关键字修饰方法,该方法即成为抽象方法,只包含方法名而不包含方法体。
格式如下:
修饰符 abstract 返回值类型 方法名 (参数列表);
例如:public abstract void run();
对于抽象类,如果一个类包含抽象方法,那么这个类必须是抽象类。
格式如下:
abstract class 类名字 {
……
}
示例
假设有一个抽象类Animal,它包含一个抽象的run()方法:
public abstract class Animal {
public abstract void run();
}
抽象类的应用
任何继承抽象类的子类都必须实现父类中的所有抽象方法。否则,该子类也必须被声明为抽象类。最终,必须有子类实现父类的所有抽象方法,否则从最初的父类到最终的子类都无法创建对象,失去实际意义。
例如,有一个父类Worker,它是一个抽象类,包含一些成员变量和一个抽象方法work():
abstract class Worker {
private String id;
private String name;
private double salary;
public Worker() {}
public Worker(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
// 抽象方法必须放在抽象类中
abstract public void work();
}
然后有两个子类Monitor和CustomerService继承了Worker类,并分别实现了work()方法。
注意事项
1. 抽象类不能创建对象,只能创建其非抽象子类的对象。如果尝试创建抽象类的对象或调用其抽象方法,编译器会报错。因为抽象方法没有具体的方法体,无法执行。
2. 抽象类中可以有构造方法,用于子类创建对象时初始化父类成员。子类的构造方法中默认会调用父类的构造方法。
3. 一个包含抽象方法的类必定是抽象类,但抽象类不一定包含抽象方法。即使一个抽象类没有包含任何抽象方法,其设计的目的通常是为了避免直接创建该类对象。这常常出现在某些特定的类结构设计之中。
关于方法重写,是子类对父类方法的补充和实现。这一过程通常称为实现方法。在实际编程过程中需注意细节与规则,确保代码能够顺利编译并运行无误。