java 클래스 접근 권한과 구성원 접근 권한 분석

2077 단어 java액세스 권한
코드를 쓸 때 문제가 하나 있다. 가방 안에 하나의 인터페이스 종류를 정의하고 다른 가방은 그것을 실현해야 한다. 여기는 인터페이스 격리와 의존 역치 원칙을 이용하여 두 가방의 의존 관계를 역치한다.그러나 여기서 문제가 하나 생겼다. 실현류는 공장 모델로 실례화되기 때문에 실현류는 가방에 노출되고 싶지 않지만 실현류는public인터페이스를 실현해야 한다.그래서 클래스가default 형식이고 구성원 함수가public 형식이라면 접근 제한은 어떻게 됩니까?
검증
1. 먼저 하나의 패키지에 인터페이스 클래스를 정의합니다.

package mytest
  
public interface ClassAccessTest
{
  void getData();
  CharSeqence getString();
}
2. 구현 패키지에서 구현 클래스와 공장 정의

package classaccesstest
  
import mytest.ClassAccessTest
  
class ClassAccessTestImp implements ClassAccessTest
{
  int mA = 0;
  
  ClassAccessTestImp(int a)
  {
    mA = a;
  }
  
  public void getData()
  {
    System.out.printlin(" the data is     " + mA);
  }
  
  public CharSequence getString()
  {
    return (" the data is " + mA);
  }
  

package classaccesstest
  
import mytest.ClassAccessTest
  
public class Factory
{
  public static ClasAccessTest getAccessTest()
  {
    return new ClassAccessTestImp(10);
  }
}
3. 원본 패키지에서 인터페이스 사용하기:

package mytest
  
import classacesstest.Factory

//import classaccesstest.ClassAccessTestImp
  
public class TestMain
{
  public static void main(String arg[])
  {
    Factory.getAccessTest().getString();

<span style="white-space:pre">  </span>//<span style="font-family: Arial, Helvetica, sans-serif;">ClassAccessTest test = </span>new <span style="font-family: Arial, Helvetica, sans-serif;">ClassAccessTestImp(10);</span>
  
  }
}

4. 결과:
TestMain 클래스에서 주석이 아닌 부분을 사용하면 정상적으로 실행할 수 있으며, 주석이 없는 부분을 사용하면 오류가 발생합니다. ClassAccessTestImp가 정의되지 않았습니다.
결론
위에서 추론한 바와 같이 자바 중류의 접근 권한은 구성원의 접근 권한보다 작을 수 있고 역치와 패키지의 봉인성에 의존하여 요구를 충족시킬 수 있다.

좋은 웹페이지 즐겨찾기