在Java中实现接口时降低可见性

Dav*_*run 8 java oop interface

我想设计类A实现接口C并降低方法的可见性(在C中声明)以使其从外部世界安全,使得在A类中实现的接口中的一个方法成为私有(降低了A类中的可见性) .出于安全原因,我必须这样做,我该怎么做,是否有解决方法.我们知道默认情况下,界面有公共成员.但我没有选择,有人可以帮助我.提前致谢.

- 所以,没有办法从接口获得类实现方法并将其设为私有.所有实现任何接口方法的类都将始终具有公共方法?

Jon*_*eet 14

不,您无法降低界面中方法的可见性.如果有人写道,你会发生什么?

C foo = new A();
foo.methodDeclaredPrivateInA();
Run Code Online (Sandbox Code Playgroud)

?就编译器而言,引用实现的所有内容都C有权调用其中的任何方法 - 这就是Liskov的替换原则的全部内容.

如果您不想实现整个公共接口,请不要实现它 - 如果您绝对必须,则抛出异常.

值得注意的是,源代码中提供的可访问性很少是一个很好的安全措施.如果您的类在VM中运行,而VM又可以确定自己的权限,那么任何人都可以通过反射使成员可见.