我想从其超类中存在的类中删除一个方法。我可以使用@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
可用。请告知如何做到这一点。
非常感谢。
答案 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
的问题。