应用程序接口(API)的开发者常常希望能够确保一些功能性的小片断总被执行。
举例来说,假设有这样一个翻译系统,开发者希望确保经过它翻译后的词总是以小写形式出现。要达到这个目的,可以提供一个用于调用的public方法,和一个打算要被覆盖的protected方法。
例如:
abstract public class Translator {
public final String translate(String word) {
word = word.toLowerCase( );
return translateWord(word);
}
abstract protected String translateWord(String word);
}
现在开发者想要翻译成一种黑话(Pig Latin),于是他可以扩展这个抽象类。例如:
public class PigLatinTranslator extends Translator {
protected String translateWord(String word) {
return word.substring(1) + word.substring(0,1) + "ay";
}
}
用户代码看起来像这样:
....
PigLatinTranslator translator = new PigLatinTranslator( );
translator.translate("seal");
// return ealsay
....
使用translator对象时只能调用public的translate方法,这时会强制调用子类的protected的translateWord方法。这就能保证代码被执行。