一。适用场景:类给外部提供的接口中的步骤是固定的,每一个步骤对应类中的一个方法。可以将这些方法定义为抽象方法,由子类实现这些抽象方法。
二。比如,体育比赛,其中的基本步骤都是固定的:开始比赛、比赛进行、结束比赛。可以定义一个抽象类SportsGame,其提供一个对外的接口haveASportsGame(),并定义3个抽象方法:startGame(),inGame(),stopGame()
package cn.edu.tju.app; public abstract class SportsGame { abstract void startGame(); abstract void inGame(); abstract void stopGame(); public void haveAGame(){ startGame(); inGame(); stopGame(); } }
然后定义SportsGame的自类,分别实现上述3个抽象方法
package cn.edu.tju.app; public class FootballGame extends SportsGame { @Override void startGame() { System.out.println("裁判吹哨,中圈开球"); } @Override void inGame() { System.out.println("抢球&打门"); } @Override void stopGame() { System.out.println("裁判吹哨,停止比赛"); } }
package cn.edu.tju.app; public class BasketballGame extends SportsGame { @Override void startGame() { System.out.println("裁判吹哨,中圈争球"); } @Override void inGame() { System.out.println("带球&投篮"); } @Override void stopGame() { System.out.println("裁判吹哨,比赛结束"); } }
最后,在主类中分别定义FootballGame和BasketballGame类对象,调用在父类SportsGame中定义的接口方法haveAGame()
package cn.edu.tju.app; public class TemplateMethodTest { public static void main(String[] args) { SportsGame footballGame=new FootballGame(); footballGame.haveAGame(); System.out.println("___________________________"); SportsGame basketballGame=new BasketballGame(); basketballGame.haveAGame(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)