有一种模板方法大家应该都很熟悉。
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