Bil*_*ard 39
当然.看一下示例的Template方法模式.
abstract class Game
{
protected int playersCount;
abstract void initializeGame();
abstract void makePlay(int player);
abstract boolean endOfGame();
abstract void printWinner();
/* A template method : */
final void playOneGame(int playersCount) {
this.playersCount = playersCount;
initializeGame();
int j = 0;
while (!endOfGame()) {
makePlay(j);
j = (j + 1) % playersCount;
}
printWinner();
}
}
Run Code Online (Sandbox Code Playgroud)
扩展的类Game仍然需要实现所有抽象方法,但它们无法扩展,playOneGame因为它被声明为final.
抽象类也可以包含既不是抽象也不是最终的方法,只是常规方法.这些方法必须在抽象类中实现,但是由实现者来决定扩展类是否需要覆盖它们.
是的,“抽象”类中可能有“最终”方法。但是,类中的任何“抽象”方法都不能声明为 final。它会给出“修饰符的非法组合:抽象和最终”错误。
public abstract final void show();
illegal combination of modifiers: abstract and final
Run Code Online (Sandbox Code Playgroud)
这是实现的工作示例。
abstract class Sian //ABSTRACT CLASS
{
public final void show() // FINAL METHOD
{
System.out.println("Yes");
}
public void display()
{
System.out.println("Overriding");
}
public abstract void success();
}
class Ideone extends Sian //INHERTING ABSTRACT CLASS
{
public void display()
{
System.out.println("Overridden");
}
public void success() //OVERRIDING THE ABSTRACT METHOD
{
System.out.println("Success overriding");
}
public static void main (String[] args) throws java.lang.Exception
{
Ideone id = new Ideone(); //OBJECT OF SUBCLASS
id.show(); //CALLING FINAL METHOD
id.display(); //OVERRIDDEN METHODS
id.success();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:-
Yes
Overridden
Success overriding
Run Code Online (Sandbox Code Playgroud)
这是 ideone 链接:- http://ideone.com/G1UBR5
| 归档时间: |
|
| 查看次数: |
38953 次 |
| 最近记录: |