`
help
  • 浏览: 22275 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java 中一种另类的模板方法写法

阅读更多
有一种模板方法大家应该都很熟悉。
public abstract class Father {
    // 基本方法
    protected abstract void doSomething();

    // 基本方法
    protected abstract void doAnything();

    // 模板方法
    public void templateMethod() {
        /*
         * 调用基本方法,完成相关的逻辑
         */
        this.doAnything();
        this.doSomething();
    }
}
public class Son extends Father{

    @Override
    protected void doSomething() {
        System.out.println("Son doSomething");
    }

    @Override
    protected void doAnything() {
        System.out.println("Son doAnything");
    }
   
}

public class TestMain {
    public static void main(String[] args) {
        Son son = new Son();
        son.templateMethod();
    }
}


------------------------------------------------------------------

那下面这种写法是什么原理:

public abstract class Father {
    // 基本方法
    protected abstract void doSomething();

    // 基本方法
    protected void doAnything(){
       templateMethod();
    }

    // 模板方法
    public void templateMethod() {
       System.out.println("111");
    }
}

public class Son extends Father{

    @Override
    protected void doSomething() {
        doAnything();
    }

    // 模板方法
    public void templateMethod() {
       System.out.println("222");
    }
   
}

public class TestMain {
    public static void main(String[] args) {
        Son son = new Son();
        son.doSomething();
    }
}

//打印了222

先调用父类方法doAnything,又会调用子类的非抽象方法templateMethod
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics