一个抽象类可以在Java中的最终方法是什么?
Answer 1:
当然。 看看在模板方法模式的一个例子。
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();
}
}
扩展类Game
仍然需要实现所有抽象方法,但是他们会无法扩展playOneGame
因为它被声明为final。
抽象类也可以既不抽象也不是最终的,只是普通的方式方法。 这些方法必须在抽象类中实现,但它是由实现决定扩展类是否需要覆盖它们。
Answer 2:
是的,它可以。 但最终的方法不能是抽象的本身(在同一类的其他非最终方法都可以)。
Answer 3:
是。
提示:刚刚火起来你喜欢的IDE(Eclipse中,NetBeans中,等),并尝试一下。 它会抱怨,如果它不能正常工作。
Answer 4:
是的,有可能是“抽象的”类“最终”的方法。 但是,在类中的任何“抽象”的方法不能被声明为final。 它会给“修饰符的非法组合:抽象和最后的”错误。
public abstract final void show();
illegal combination of modifiers: abstract and final
下面是执行工作的例子。
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();
}
}
输出: -
Yes
Overridden
Success overriding
这里是ideone链接: - http://ideone.com/G1UBR5
Answer 5:
是。
Answer 6:
是的,这些方法不能在子类中重写。 这方面的一个例子是模板方法模式...
Answer 7:
是的,它可以...需要更多的字符
Answer 8:
当然,这意味着你可以继承它,但你不能覆盖特定的方法。
Answer 9:
是。 在abstract
修改使得有可能省略一些一类的实现(即具有一定的abstract
方法),但你不会强加任何限制。
Answer 10:
在抽象类的方法可被定义或不是。 如果我们再扩展抽象类只有它具有意义,所以什么都的方法,我们声明或摘要定义调用它会在子类上骑车。 因此,我们可以定义一个方法,最终在抽象类,这将是在子类中超过缠身。
Answer 11:
假设我想设计类有一些实现,但我不希望别人(子类)来实现,但其他的方法,那么在这种情况下,我们需要一个最终的实现方法和显而易见的选择抽象类。
文章来源: Can an abstract class have a final method?