我有一个带有抽象方法method1和method2的抽象类。我有扩展抽象类的类A,B和C。

我的问题是如何仅限制类B覆盖method2?我希望所有其他类都能够按意愿覆盖任何方法。

如果使用抽象类无法做到这一点,是否可以使用接口实现这种情况?如果是这样,请您举例说明一下。

这是我要实现的一种情况。抽象类鸟具有抽象方法fly()。我希望鹰能够替代它,但不能替代企鹅类

    abstract class bird{
            abstract void fly();
    }
    class eagle extends bird{
            @override
            void fly(){
                    Sysout("I can fly really high!");
    }

    class penguin extends bird{
            @override
            /*How do I make sure this method is not at overridden, because there are chances that      this method could be accidentally overridden*/
            void fly(){
                    Sysout("I cannot fly");
            }
    }

最佳答案

您可以在B的中间创建一个类,该类将覆盖method2并将其标记为final。然后,B将从此中产阶级扩展而来,不能覆盖method2

请注意,在这种情况下,最好使用接口而不是扩展方法来添加行为。因此,例如:

public interface CanFly {
    void fly();
}

public class Eagle implements CanFly {
    @Override
    public void fly() {
        //...
    }
}

public class Penguin {
    //I cannot fly, I do not need to implement CanFly
}

10-04 10:17