.基本方法:由抽象方法(抽象类声明、具体子类实现)、具体方法(抽象类或具体子类声明并实现,具体子类可以覆盖或直接继承)、钩子方法(抽象类中已声明并实现)组成
/** * 堆代码 duidaima.com * 炒菜:抽象类 */ public abstract class StirFry { /** * 模板方法 * * 注意:需要使用final修饰,不允许被子类重写 */ public final void start() { // 倒油 this.pourOil(); // 加菜 this.addFood(); // 加调味料 this.addSauce(); // 翻炒 this.fry(); } /** * 倒油 */ private void pourOil() { System.out.println("倒油"); } /** * 加菜 */ abstract void addFood(); /** * 加调味料 */ abstract void addSauce(); /** * 翻炒 */ private void fry() { System.out.println("翻炒"); } }具体子类
/** * 青椒炒肉 */ class GreenPepperFriedMeat extends StirFry { /** * 加菜 */ @Override void addFood() { System.out.println("放入五花肉"); } /** * 加调味料 */ @Override void addSauce() { System.out.println("放入青椒"); } }测试类
public class Demo { public static void main(String[] args) { // 创建实例对象 GreenPepperFriedMeat gpfm = new GreenPepperFriedMeat(); // 调用模板方法 gpfm.start(); } }优缺点