C/C++教程

20220808-抽象类和方法_abstract

本文主要是介绍20220808-抽象类和方法_abstract,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 1. 概念:
  • 2. 使用细节:
  • 3. 抽象类实践——模版设计模式

抽象类:当父类的某些方法,需要声明,但是有不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类。

abstract class className{
    //属性
    //普通方法
    //构造器
    //代码块,静态代码块
    //静态方法
}

1. 概念:

  • 抽象方法没有方法体,只有方法声明
  • 抽象类会被继承,由其子类来实现抽象方法
  • 用abstract修饰类时,该类就是抽象类
  • 用abstract修饰方法时,该方法就是抽象方法
  • 抽象类的价值更多作用是在于设计,设计者设计好后,让子类继承实现抽象类
  • 抽象类在框架和设计模式中使用较多
  • 抽象类不一定要包含abstract方法,可以有普通方法
  • 抽象类不能被实例化
  • 一旦包含抽象方法,该类就必须是抽象类
  • abstract只能修饰类和方法,不能修饰属性和其他

2. 使用细节:

 - 抽象类可以有任意成员(非抽象方法、构造器、静态属性等)
 - 抽象方法不能有方法体
 - 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非他自己也声明为抽象类
 - 抽象方法不能使用private、final和static修饰,因为这些关键字和重写相违背
 - 抽象类中的普通方法和属性可以使用任意修饰符

3. 抽象类实践——模版设计模式

抽象的概念我的理解是:主要是提取共性的东西,用来提高代码复用
将共有的方法提取到抽象父类中,将变化的部分使用抽象方法的方式来表示,通过普通方法调用抽象方法,利用到了父类与子类间的继承和多态,不同的子类对象可以动态调用其实现的父类抽象方法。
//模版设计模式
abstract class AABB {
    public void calculate() {
        long startTime = System.currentTimeMillis();
        job();
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime);
    }
    abstract void job();
}
class AA extends AABB {
    public void job() {
        long num = 0;
        for (long i = 0; i < 100000; i++) {
            num += i;
        }
    }
}
class BB extends AABB {
    public void job() {
        long num = 0;
        for (long i = 0; i < 100000; i++) {
            num *= i;
        }
    }
}
这篇关于20220808-抽象类和方法_abstract的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!