[Java基础揉碎]抽象类

时间:2024-03-26 17:24:33

目录

通过问题引出

介绍

关键点

 细节

​编辑

抽象类的最佳设计模式--模版设计模式

1.先用最容易想到的方法

2.分析问题,提出使用模板设计模式


通过问题引出

假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道, 那么我们就可以声明为抽象类 

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

介绍

所谓抽象方法就是没有实现的方法

所谓没有实现就是指, 没有方法体

 当一个类中存在抽象方法是, 这个类也必须声明为抽象类

 一般来说, 抽象类会被继承, 有子类来具体实现

关键点

1) 用abstract关键字来修饰一个类时,这个类就叫抽象类

        访问修饰符 abstract 类名{ 

        }

2) 用abstract关键字来修饰一个方法时,这个方法就是抽象方法

        访问修饰符 abstract 返回类型 方法名(参数列表);

        //没有方法体

3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现它

4)抽象类,是考官比较爰问的知识点, 在框架和设计模式使用较多

 细节

1)抽象类不能被实例化

2)抽象类不一定要包含abstract方法。也就是说, 抽象类可以没有abstract方法

3)一旦类包含了abstract方法,则这个类必须声明为abstract 

4) abstract 只能修饰类和方法,不能修饰属性和其它的

5) 抽象类可以有任意成员[因为抽象类还是类],比如:非抽象方法、构造器、静态属性等等

6) 抽象方法不能有主体,即不能实现

7) 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract类

 8) 抽象方法不能使用private、 final 和 static来修饰,因为这些关键字都是和重写相违背的

抽象类的最佳设计模式--模版设计模式

如果有一个需求

1)有多个类,完成不同的任务job

2) 要求统计得到各自完成任务的时间

1.先用最容易想到的方法

A类如下方法:

B类有如下方法:

 然后我们去执行:

但是这样有一个问题如果每个类的还有多个job需要去计算, 这样代码的复用率极低 

我们可能会说可以把重复的代码抽出来单独写一个如下的方法, 实现代码的复用

这样也有一个问题就是这样每个类都需要写一个这样的方法

2.分析问题,提出使用模板设计模式

所以我们就需要抽象类和抽象方法, 将每个类要写的这个方法抽离为一个模版

AA类去重写 

 BB类也去重写

 打印效果相同

aa.calulateTime的调用过程就是, 它先到AA类里面去看有没有这个方法, 没有之后找到父类的这个方法, 父类去掉用job, 此时上面的job是抽象方法, 这个抽象方法通过动态绑定机制, 绑定到当前对象, 在去调用AA 类里面的job方法