如何限制子类覆盖/实现超类方法

Kri*_*nya 0 java inheritance

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

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

如果使用抽象类不可能这样做,是否可以使用接口实现这种情况?如果是这样,你能用一个例子向我解释一下吗?

这是我想要实现的一个这样的案例.抽象类鸟有抽象方法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");
            }
    }
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 5

您可以在中间创建一个类,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
}
Run Code Online (Sandbox Code Playgroud)