隐藏子类中的方法

mac*_*ery 4 java methods inheritance method-hiding member-hiding

我有一个带有一些实现方法的抽象超类。

是否可以在继承该超类的子类中隐藏该超类的方法?我不想让某些方法在某些子类中从超类中可见。最后但并非最不重要的一点是,是否可以更改子类中与超类中具有相同名称的方法的参数数量?

假设我们public void test(int a, int b)在超类中有一个方法,但现在我想public void test(int a)在子类中有一个方法来调用超类函数,而超类中的方法不再可见。

aio*_*obe 7

是否可以在继承该超类的子类中隐藏该超类的方法?

如果您在超类中将该方法设置为私有,则该方法在子类(或其他任何类)中将不可见。

但是,如果您需要基类中的方法是公共的,则无法通过例如使用私有实现覆盖它来将其隐藏在子类中。(您不能“降低可见性”,即在子类中从公共或受保护变为私有。)

最好的解决方法可能是重写该方法并抛出运行时异常,例如UnsupportedOperationException.

是否可以更改子类中与超类中具有相同名称的方法的参数数量?

不,您无法更改签名。您可以创建另一个具有相同名称和不同数量参数的方法,但这将是一个不同的(重载)方法,并且基类中的方法仍然可见。