文章目录
一、抽象类的介绍
1、什么是抽象类和抽象方法
抽象类是被关键字abstract
修饰的类。
抽象方法也是被关键字abstract
修饰的方法。
2、什么时候用抽象方法
当在继承关系中设计父类的时候,如果父类中的一个公共方法不确定
该方法的具体实现时,那么父类干脆就不实现该方法,将其定义成抽象方法,再由子类重写
即可。
3、什么时候用抽象类
当需要强制子类重写
父类方法的时候使用抽象类
二、语法
1、抽象类的语法
作用域修饰符 abstract class 类名{
}
public abstract class Father{
}
2、抽象方法的语法
修饰符 abstract 返回值类型 方法名(参数列表);
public abstract void Father();
三、注意事项
1、一个抽象类可以含有或者不含有抽象方法
比喻:父亲可以有房子也可以没有房子
2、一个类如果被抽象那么只有被子类继承才能有意义
比喻:人民币只有被国家认可才能够在市面上流通,不被认可就不能在市面上流通
3、抽象类中可以有普通方法也可以有抽象方法
解释:在被定义为抽象类后,可以自己定义抽象方法以及普通方法,也可以都不定义,没有要求说必须只有一种,普通方法和抽象方法可以同时定义
4、将父类定义为抽象类后,子类如果想要继承父类的话就必须重写
父类的抽象方法
解释:Father类中有eat()的抽象方法,子类如果想要继承父类的话必须重写eat()方法
5、抽象类不能够直接创建对象,如果创建则编译无法通过,但它的子类可以直接创建对象
解释:在抽象类中(也就是被定义为抽象类的父类)不能够使用 new 关键字创建
对象,但是子类可以
6、抽象方法没有方法体
解释:没有方法体的意思就是没有大括号以及大括号里面的内容,直接使用 ; 结束。 可参照第三点中的语法
7、继承抽象类的子类必须重写抽象类中的所有抽象方法,否则该子类也必须声明为抽象类
解释:子类必须重写父类中的抽象方法(即带有abstract关键字的方法)
8、抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想
解释:抽象类只有被子类继承才有它存在的意义,该类就相当于一个模板抽象了一些公共的属性和方法,谁需要使用就可以继承该抽象类并重写里面的抽象方法
四、案例讲解
1、题目
假如我现在需要定义新司机和老司机类,新司机和老司机都有开车功能,开车的步骤都一样,只是驾驶时的姿势有点不同,新司机:开门点火,双手紧握方向盘,刹车;熄火,老司机:开门,点火,右手握方向盘左手抽烟,刹车,熄火。我们可以将固定流程写到父类中,不同的地方就定义成抽象方法,让不同的子类去重写
2、题目分析
由于新司机和老司机都有一个公共的方法:开车,但是两者又在一些方面存在着小小的差别。新司机和老司机在驾驶的时候都必须
要开车这个方法,不然无法开车,所以这就体现了抽象类中的特性(在注意点4中,可以回到上面去看看)
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();
}
4、定义两个使用模板的司机
public class NewDriver extends Driver {
@Override
public void ziShi() {
System.out.println("新司机双手紧握方向盘");
}
}
public class OldDriver extends Driver {
@Override
public void ziShi() {
System.out.println("老司机右手握方向盘左手抽烟...");
}
}
5、测试类
public class Demo02 {
public static void main(String[] args) {
NewDriver nd = new NewDriver();
nd.go();
OldDriver od = new OldDriver();
od.go();
}
}