一个抽象类可以有一个最后的方法是什么?(Can an abstract class have a f

2019-08-01 16:52发布

一个抽象类可以在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?