删除/弃用子类中的方法

时间:2013-04-19 04:45:40

标签: java deprecated override

我想从其超类中存在的类中删除一个方法。我可以使用@Deprecated注释来弃用超类方法,但它仍然可以在子类中访问。

例如:

public class Sample {

    void one() {}

    void two() {}

    @Deprecated
    void three() {}
}

class Sample2 extends Sample {
    @Override
    void one() {}

    public static void main() {
        Sample2 obj = new Sample2();
        obj.one();
        obj.two();
        obj.three();// I do not want to access this method through the sample 2 object.
    }
}

在使用Sample2对象时,我只希望方法onetwo可用。请告知如何做到这一点。

非常感谢。

4 个答案:

答案 0 :(得分:1)

覆盖Sample2中的三()并在访问该方法时抛出异常。

答案 1 :(得分:1)

在编译时你无能为力。您不能拥有比超类更少的方法的子类。你可以做的最好的事情是像@Sudhanshu提出的运行时错误,也许还有一些工具(比如自定义的FindBugs规则)在IDE中将它标记为错误。

答案 2 :(得分:0)

在只应在自己的类中访问的方法前面使用private访问级别修饰符。

public class Sample {

    void one() {}

    void two() {}

    @Deprecated
    private void three() {}
}

答案 3 :(得分:0)

在使用它时隐藏另一个类的接口的一个想法是用自己的对象包装它(即不要使用子类)。

class MySample {
    private Sample sample;
    //maybe other stuff

    public MySample(){ 
        sample = new Sample();
    }

    void one(){
        return sample.one();
    }
}

这可能不令人满意:不希望以预期的方式使用Sample同时想要劫持和扩展其行为。它解决了在您的支持three()上调用Sample的问题。