抽象类
1.抽象类的概念
隐藏内部的实现细节,只对外提供功能的过程
要明白抽象类的概念的概念,首先要明白抽象类用在什么时候?
- 在子类继承父类的关系中
- 子类重写父类的方法
多个子类继承父类方法,有都需要各自对该方法进行重写的时候,就可以吧父类的此方法定义为抽象方法(用修饰符abstract修饰此方法)。
(即只提供这个方法这样的功能,具体的实现被父类隐藏了,让子类去实现)
而这样拥有抽象方法的类就被叫做抽象类,类前的修饰符就要用abstract来修饰此把
理解:抽象就是为了继承而存在的,它的抽象方法就是为了强制子类去实现这个方法
就行你爸爸有一套毛坯房,直接给你,你喜欢摆烂不装修,还说住的挺舒服
那么你爸爸很生气,不给你了,说你出钱吧这套毛坯房装修好,我在把房产证换成你的名字
2.抽象的语法
abstract 关键字修饰的类和方法就是抽象方法和抽象类
1.抽象方法
public abstract void eat();
在方法定义的时候加上abstract就是抽象方法,注意抽象方法没有方法体(即没有大括号和括号里的内容),强制子类去实现它
2.抽象类
public abstract class Human{
}
在创建类的时候加上abstract修饰类,就是抽象类
3.抽象类的注意事项
- 抽象类中可以没有抽象方法,饭抽象方法一定在抽象类中(即你把方法定义成抽象的,那么这个类也就成为了抽象类,你也要把它定义为抽象的)
- 抽象类可以含有普通方法和成员变量
- 抽象类不可以被实例化,只可以子类实例化
- 抽象类的子类一定要实现抽象方法
3.抽象的运行,模板模式
模板模式:
父类实现了大家通用的功能,但不一样的地方定义为抽象方法,让子类具体去实现
比如大家开车,都开门、点火就可以设定为模板,但中间我方向盘开车姿势不确定,就定义为抽象方法让子类具体去实现,在调用这个方法
public abstract class Driver {
public void go() { //模板方法:具体定义了固定的流程
System.out.println("开门");
System.out.println("点火");
// 开车姿势不确定?定义为抽象方法
ziShi();
System.out.println("刹车");
System.out.println("熄火");
}
public abstract void ziShi();
}
子类1
public class NewDriver extends Driver {
@Override
public void ziShi() {
System.out.println("新司机双手握方向盘");
}
}
public class OldDriver extends Driver {
@Override
public void ziShi() {
System.out.println("老司机单手握方向盘抽烟");
}
}
子类2
public class Demo02 {
public static void main(String[] args) {
NewDriver nd = new NewDriver();
nd.go();
OldDriver od = new OldDriver();
od.go();
}
}
共同的模板已经定义好拿来用就好,只需要实现自己的功能