抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义,抽象类体现的是模板思想,模板是通用的东西。
抽象类:包含抽象方法的类。
abstract class 类名字 {
}
抽象方法:没有方法体的方法
修饰符 abstract 返回值类型 方法名 (参数列表);
抽象类的使用
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。
此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法。
抽象类的特征
有得:抽象类得到了拥有抽象方法的能力
有失:抽象类失去了创建对象的能力
抽象类的注意事项
- 抽象类不能创建对象。
- 抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的。
- 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。
- 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
模板设计模式:司机开车
- 定义开车类的模版:在父类中调用子类重写后的方法
- 定义一些固定的内容(开门,点火,刹车,熄火)
- 不用的内容定义抽象方法(开车姿势不同)
Driver.java
1 public abstract class Driver {
2 //定义开车的方法
3 public void drive(){
4 System.out.println("开门");
5 System.out.println("点火");
6 ziShi();//调用的是每个子类重写后的方法
7 System.out.println("刹车");
8 System.out.println("熄火");
9 }
10
11 //新司机和老司机开车的方式不同,定义为抽象方法
12 public abstract void ziShi();
13 }
NewDriver.java
//定义新司机类,是司机的一种,继承司机类
public class NewDriver extends Driver {
@Override
public void ziShi() {
System.out.println("新司机开车姿势:双手紧握方向盘!");
}
}
OlederDriver.java
//定义老司机类,是司机的一种,继承司机类
public class OldDriver extends Driver{
@Override
public void ziShi() {
System.out.println("老司机开车姿势:右手握方向盘左手抽烟!");
}
}
测试类Demo01Driver.java
public class Demo01Driver {
public static void main(String[] args) {
//创建新司机对象
NewDriver nd = new NewDriver();
nd.drive();
System.out.println("-----------------");
//创建老司机对象
OldDriver od = new OldDriver();
od.drive();
}
}
运行结果