I would like to design class A implements interface C and reduce the visibility of a method (declared in C)to make it secure from outer world, make one of the methods in in
No, you can't reduce the visibility of a method in an interface. What would you expect to happen if someone wrote:
C foo = new A();
foo.methodDeclaredPrivateInA();
? As far as the compiler is concerned, everything with a reference to an implementation of C
has the right to call any methods within it - that's what Liskov's Substitution Principle is all about.
If you don't want to implement the whole of a public interface, don't implement it - or throw exceptions if you absolutely must.
It's also worth noting that the accessibility provided in source code is rarely a good security measure. If your class is running in a VM which in turn gets to determine its own permissions, anyone can make members visible via reflection.
You can't reduce the visibility of the method of an interface in Java. Is it acceptable for you to implement the method by throwing a java.lang.UnsupportedOperationException
?
You cannot reduce visiblity because you could write something along the lines of
C newC = new A();
This approach worked for me. Any new function added to PrivateInterface would break still break PublicSampleClass
private interface PrivateInterface {
void fooBar();
}
public class PublicSampleClass {
private final listenerInterface = new PrivateInterface {
public void fooBar() {
PublicSampleClass.this.fooBar();
}
};
protected void fooBar() {
// Non public implementation
}
}