抽象类和抽象方法
抽象类:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
抽象方法:就是加上abstract关键字,去掉大括号,直接分号结束。抽象方法所在的类必须是抽象类,在class之前写上abstract即可
特征:
- 抽象方法没有方法体
- 抽象方法必须存在于抽象类中
- 子类重写抽象父类时,必须重写父类所有的抽象方法
如何使用抽象类和抽象方法:
- 不能直接创建new抽象类对象
- 必须用一个子类来继承抽象类对象
- 子类必须覆盖重写抽象父类当中所有的抽象方法
- 创建子类对象进行使用
注意事项
-
抽象类不能创建对象,如果创建,编译无法通过而报错,只能创建其非抽象子类的对象
假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有方法体,无意义
-
抽象类中可以有构造方法,是供子类创建对象时,初始化父类成员使用
子类的构造方法中,有默认的super(),需要访问父类构造方法
-
抽象类中不一定有抽象方法,但是抽象方法所在的类一定是抽象类
-
抽象类的子类必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错,除非该子类也是抽象类
抽象类简单示例:
abstract class Employee {
private int ID;
private String name;
public Employee(int ID, String name){
this.ID = ID;
this.name = name;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void showInformation();
}
class Teacher extends Employee{
public Teacher(int ID, String name) {
super(ID, name);
}
@Override
public void showInformation() {
System.out.println("ID is: " + getID() + "name is: " + getName());
}
}
public class AbstractTest {
public static void main(String[] args) {
Teacher t = new Teacher(100, "Forlogen");
t.showInformation(); // ID is: 100name is: Forlogen
}
}