0

我想从一个存在于它的超类中的类中删除一个方法。我可以使用注释弃用超类方法@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对象时,我只想要方法one并且two可用。请就如何做到这一点提出建议。

非常感谢。

4

4 回答 4

2

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

于 2013-04-19T04:46:59.207 回答
1

在编译时您无能为力。子类的方法不能少于超类。你能做的最好的就是像@Sudhanshu 建议的那样做一个运行时错误,也许还有一些工具(比如自定义 FindBugs 规则)在你的 IDE 中将它标记为错误。

于 2013-04-19T04:52:18.883 回答
0

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

public class Sample {

    void one() {}

    void two() {}

    @Deprecated
    private void three() {}
}
于 2014-08-22T12:04:30.090 回答
0

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

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

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

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

这可能是不令人满意的:不想Sample完全按照预期的方式使用它,同时又想劫持和扩展它的行为。它解决了永远需要three()你的支持的问题Sample

于 2016-07-24T17:27:23.513 回答