【Java笔记】16 抽象类

一、介绍

  1. 当父类的某些方法需要声明,但又不确定如何实现时,将其声明为抽象方法,这个类就是抽象类
  2. 用abstract关键字修饰一个类时,这个类就叫抽象类
    访问修饰符 abstract 类名{}
  3. 用abstract关键字来修饰一个方法时,这个方法就是抽象方法
    访问修饰符 abstract 返回类型 方法名(参数列表); // 没有方法体
  4. 抽象类一般会被继承,其子类来实现抽象方法

二、注意事项

  1. 抽象类不能被实例化
  2. 抽象类不一定要包含abstract方法,即抽象类可以没有abstract方法,可以有实现的方法
  3. 一旦类包含了abstract方法,则这个类必须声明为abstract
  4. abstract只能修饰类和方法,不能修饰属性和其它的
  5. 抽象类可以有任意成员,比如非抽象方法、构造器、静态属性..
  6. 抽象方法不能有主体,即不能实现
  7. 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类
  8. 抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背
  1. public class Abstract01 {
  2. }
  3. abstract class H{
  4. public abstract void hi(); // 抽象方法
  5. }
  6. // 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类
  7. abstract class E{
  8. public abstract void hi();
  9. }
  10. abstract class F extends E{ }
  11. class G extends E{
  12. @Override
  13. public void hi() {
  14. // 实现方法,有方法体就行
  15. }
  16. }

三、抽象类实践——模板设计模式

3.1 基本介绍

  1. 抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式,

3.2 模板设计模式能解决的问题

  1. 当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类实现
  2. 编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给子类实现,就是一种模板模式

3.3 例

需求:

  1. 有多个类,完成不同的任务job
  2. 要求统计得到各自完成任务的时间
  1. abstract public class Template {
  2. public abstract void job(); // 抽象方法
  3. // 实现方法,调用job方法
  4. public void calculateTime(){
  5. // 得到开始的时间
  6. long start = System.currentTimeMillis();
  7. job(); // 动态绑定
  8. // 得到结束的时间
  9. long end = System.currentTimeMillis();
  10. System.out.println("任务执行时间 "+(end-start));
  11. }
  12. }
  1. public class AA extends Template{
  2. @Override
  3. public void job() {
  4. long num = 0;
  5. for (int i = 1; i <= 80000000; i++) {
  6. num+=i;
  7. }
  8. }
  9. }
  1. public class BB extends Template{
  2. @Override
  3. public void job() {
  4. long num = 0;
  5. for (long i = 1; i <= 80000; i++)
  6. {
  7. num *= i;
  8. }
  9. }
  10. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. AA aa = new AA();
  4. aa.calculateTime();
  5. BB bb = new BB();
  6. bb.calculateTime();
  7. }
  8. }