我在Java中有一个类A
,A
有一些受保护的方法,然后我有一个B
的{{1}}来自extends
,所以A
可以覆盖这些受保护的方法。然后,我希望能够有一个B
课程,C
来自课程extends
但课程B
应该无法调用C
' s保护方法。有没有在Java中做到这一点?我只是让父母的班级方法覆盖并让他们最终?胃内
A
答案 0 :(得分:3)
不,您无法阻止子类调用父级的protected
方法。要实现此目的,您必须降低方法的可见性,这是不允许的。在类final
中创建方法B
只意味着它不能在任何子类中被覆盖。
您希望禁止对子类调用protected
方法这一事实对我来说似乎是一个设计问题。您可能想要查看整个类层次结构,并且可能更好地隔离类的reponsibilites,这样您就不会遇到必须阻止通常允许的情况(调用protected
方法)。 / p>
答案 1 :(得分:1)
//How do I make some variable final or not accessible to my children?
为此,您可以创建变量私有和最终:
private final int COUNT = 100;
私人访问者会阻止子类访问您的变量COUNT。
答案 2 :(得分:1)
如果B覆盖受保护的方法以阻止C访问A中实现的方法就足够了.C只能访问B中实现的方法。看看Java How to call method of grand parents?。