멤버가있는 클래스가 있고 멤버 자체가 클래스 자체보다 덜 제한적인 액세스 수정자를 가지고 있다고 가정 해보십시오.
구체적인 예는 다음과 같습니다.
package apples;
class A { // package private
public int foo() { // public (=> less restrictive than *package private*)
return 42;
}
}
멤버 액세스 수정 자 보다 더 제한적인 클래스 액세스 수정자를 이해 하면 덜 제한적인 멤버 액세스 수정자를 재정의합니다 . 따라서 덜 제한적인 멤버 액세스 수정자는 전혀 영향을 미치지 않습니다.
- 이해가 정확합니까?
- 그렇지 않은 경우 결과는 무엇입니까?
- 덜 제한적인 멤버 액세스 수정자를 갖는 유효한 이유는 무엇입니까?
- 마지막으로 따라야 할 모범 사례 는 무엇 입니까?
함수 참조를 전달하기 시작하면 결과가 발생할 수 있다고 생각했기 때문에 실험도했지만 액세스 수정자는 중요하지 않습니다.
내가 구성한 상황은 다음과 같습니다.
apples.B
공개 방법을 제공합니다bla()
참조를 반환 를apples.A.foo
.- 그때
pizzas.C
apples.B.bla
참조를 얻기 위해 호출 하여A.foo
호출합니다. - 그래서
A.foo()
에 직접 표시되지C
않지만 다음을 통해 간접적으로 만 액세스 할 수 있습니다.B.bla()
나는 그것을 테스트했으며 foo()
패키지 의 액세스 수정자를 개인용으로 만들지 여부에 차이가 없습니다.
package apples;
import java.util.function.IntSupplier;
public class B {
public IntSupplier getReferenceToAFoo() {
A aInstance = new A();
return aInstance::foo;
}
}
package pizzas;
import apples.B;
import java.util.function.IntSupplier;
public class C {
private int callAFooIndirectly() {
B bInstance = new B();
IntSupplier intsupplier = bInstance.getReferenceToAFoo();
return intsupplier.getAsInt();
}
public static void main(String[] args) {
C cInstance = new C();
int i = cInstance.callAFooIndirectly();
System.out.println(i);
assert 42 == i;
}
}
java.util.Collections.SingletonSet<E>
하다private
에서java.util.Collections
).