钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:抽象方法(Abstract Method),具体方法(Concrete Method),钩子方法(Hook Method)。

四种方法的基本定义(前提:在抽象类中定义):

(1)抽象方法:由抽象类声明,由具体子类实现,并以abstract关键字进行标识。

(2)具体方法:由抽象类声明并且实现,子类并不实现或者做覆盖操作。其实质就是普遍适用的方法,不需要子类来实现。

(3)钩子方法:由抽象类声明并且实现,子类也可以选择加以扩展。通常抽象类会给出一个空的钩子方法,也就是没有实现的扩展。它和具体方法在代码上没有区别,不过是一种意识的区别;而它和抽象方法有时候也是没有区别的,就是在子类都需要将其实现的时候。而不同的是抽象方法必须实现,而钩子方法可以不识闲。也就是说钩子方法为你在实现某一个抽象类的时候提供了可选项,相当于预先提供了一个默认配置。

(4)模板方法:定义了一个方法,其中定义了整个逻辑的基本骨架。

代码如下:

/**

* 抽象类,定义模板方法和基本方法

*/

abstract class abstractClass{

/**

* 具体方法,声明并实现,继承此抽象类不需实现此方法

*/

public void concreteMethod(){

System.out.print("这是一个具体方法");

}

/**

* 抽象方法,abstract关键字标识,只声明,并不实现,继承此抽象类必须实现此方法

*/

protected abstract void abstractMethod();

/**

* 钩子方法,声明并实现(空实现或者定义相关内容皆可),继承此抽象类的子类可扩展实现或者不实现

*/

public void hookMethod(){

//可定义一个默认操作,或者为空

//System.out.print("此钩子方法有个默认操作")

};

/**

* 模板方法,整个算法的骨架

*/

public void templateMethod(){

abstractMethod();

concreteMethod();

hookMethod();

}

}

public class childClass2 {

public void bond(abstractClass abstractClass){

abstractClass.templateMethod();

}

}

public class Test{

public static void main(String[] args) {

childClass2 childClass2=new childClass2();

childClass2.bond(new abstractClass(){//匿名内部类实现回调

@Override

protected void abstractMethod(){

System.out.print("子类实现父类抽象类中的抽象方法");

}

/**

* 重构钩子方法

*/

//public void hookMethod(){

System.out.print("子类可以在父类钩子方法实现的基础上进行扩展");

}

}

}

java 钩子_java中钩子方法的概念相关推荐

  1. java 钩子方法_java中钩子方法的概念

    钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新 ...

  2. java监视器_java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)...

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  3. java 锁_Java之线程并发的各种锁、锁、锁

    因为两周没更新了... 也不是懒,这两周确实有些忙,赶项目进度赶的不亦乐乎... 终于赶在工期前,可以进入内测了,我也有了些时间,可以更新啦... 线程并发锁是很常见的问题,而且在Java中锁的类型. ...

  4. Java反射机制01_反射的概念以及获取字节码信息 的四种方式

    Java反射机制01-反射的概念以及获取字节码信息 的四种方式 一.反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象, 都能够调用它的任意 ...

  5. java中接口文件创建_功能接口简介–在Java 8中重新创建的概念

    java中接口文件创建 世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.C ...

  6. 功能接口简介–在Java 8中重新创建的概念

    世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.Comparator,ja ...

  7. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  8. 类与方法java讲解_Java中方法使用的深入讲解

    方法的使用 1.方法的基本用法 什么是方法,方法就是一个代码片段,类似于c/c++ 语言中的"函数". 1.1方法存在的意义: 是能够模块化的组织代码(当代码规模比较复杂的时候). ...

  9. java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)

    java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一) 目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronize ...

最新文章

  1. select报错 spark_使用spark-sql报错 “Metastore contains multiple versions”
  2. freeglut中提供的几种立体几何对象绘制的android移植
  3. lucene修改索引——(六)
  4. 随想(二):简化别人的工作,就是简化自己的工作,节省自己的时间
  5. C#获取电脑IP、MAC地址示例代码
  6. C++包扩展_利用 MATLAB Coder 将M代码生成C/C++代码
  7. java项目在本地部署_jenkins部署java项目在本地(三)
  8. 2020湖南省技能竞赛获奖名单_2020技能竞赛丨湖南省职业院校技能竞赛我校赛点圆满闭幕...
  9. Go语言查缺补漏ing Day1
  10. js在字符串中间插入横线
  11. 移动流量转赠给好友_移动的号怎么赠送流量给好友?
  12. 收集一些支付平台(第四方)
  13. 数组中相同id的其他属性进行拼接的方法
  14. C++第33课--C++中的字符串类
  15. vue动画transition
  16. [spm操作] 什么是mask,如何做mask(未完)
  17. valgrind小结
  18. 测试LINUX常用命令全集
  19. 当“中国制造2025”遇见“德国工业4.0”2016装博会上举行中德论坛
  20. 51单片机 Proteus仿真 数码管 万年历 电子时钟 阴历阳历 星期 DS1302 修改时间

热门文章

  1. AAAI2020录用论文汇总(三)
  2. CNN 与 Transformer 的强强联合!谷歌最新开源 BoTNet,ImageNet 达 84.7%准确率
  3. 世界杯直播“三分天下”,视频平台如何实现高清直播?
  4. SpringMVC重定向传参
  5. TensorFlow 1.9开始支持树莓派
  6. 简便方法创建自签名证书
  7. hbase源码系列(九)StoreFile存储格式
  8. 要学好linux运维请从排版画图开始
  9. #翻译NO.5# --- Spring Integration Framework
  10. 请教SQL对日期格式化的写法