내부클래스 예제

내부 클래스는 중첩 클래스의 일부입니다. 비정적 중첩 클래스를 내부 클래스라고 합니다. 여기서 Outer_Demo는 외부 클래스이고 Inner_Demo는 내부 클래스이고 display_Inner(는 내부 클래스를 인스턴스화하는 내부 메서드이며 이 메서드는 기본 메서드에서 호출됩니다. Java에서는 클래스(클래스 내의 클래스)를 중첩할 수도 있습니다. 중첩 된 클래스의 목적은 함께 속한 클래스를 그룹화하는 것입니다. 라이브러리를 디자인할 때 외부에서 사용할 클래스만 공개해야 한다는 것입니다. 이렇게 하면 다음 문으로 A 정적 클래스 개체를 만들 수 있는 클래스를 숨길 수 있습니다. DllImport를 원하는 C/C++ 기반 라이브러리가 있는 경우 이러한 함수를 클래스의 정적 함수로 가져오고 내부로 만들 수 있으므로 사용자는 원래 API가 아닌 래퍼에만 액세스할 수 있으므로 아무 것도 망가지지 않도록 할 수 있습니다. 정적 인 함수는 필요한 여러 래퍼 클래스에 대해 어셈블리의 모든 곳에서 사용할 수 있습니다. 문제가 발생할 수 있는 이유는 다른 개발자가 동일한 어셈블리에서 다른 클래스를 빌드해야 할 수 있기 때문일 수 있습니다. 내부를 갖는 것은 추상화의 명확성을 감소시키고, 오용되는 경우 문제를 일으킬 수 있습니다.

그것은 당신이 그것을 공개 한 것처럼 같은 문제가 될 것입니다. 다른 개발자가 빌드하는 다른 클래스는 외부 클래스와 마찬가지로 여전히 소비자입니다. 클래스 추상화 및 캡슐화는 외부 클래스에 대한 보호뿐만 아니라 모든 클래스에 대한 보호입니다. 다음은 자바에서 내부 클래스를 인스턴스화하고 사용하는 방법을 보여주는 테스트 프로그램입니다. Java 내부 클래스 또는 중첩 클래스는 클래스 또는 인터페이스 내에서 선언되는 클래스입니다. OuterClass를 컴파일할 때 내부 클래스, 로컬 내부 클래스 및 정적 중첩 클래스에 대해 별도의 클래스 파일이 만들어집니다. 로컬 내부 클래스의 경우 정의된 범위에서 로컬 비최종 변수에 액세스할 수 있습니다. (자바 버전 8 이상) 마찬가지로 익명 내부 클래스를 사용하여 콘크리트 클래스의 메서드와 인터페이스를 재정의할 수 있습니다. 익명 내부 클래스는 항상 클래스를 확장하거나 인터페이스를 구현합니다. 익명 클래스에는 이름이 없으므로 익명 클래스에 대한 생성자(생성자)를 정의할 수 없습니다. 다음은 정적 중첩 클래스에 대해 기억해야 할 몇 가지 사항입니다.

클래스에 액세스하는 개인 멤버가 있다고 가정합니다. 내부 클래스를 작성하고 내부 클래스 내의 메서드(예: getValue()에서 개인 멤버를 반환하고 마지막으로 다른 클래스(개인 멤버에 액세스하려는)에서 내부 클래스의 getValue() 메서드를 호출합니다. 내부적으로 사용해야 하는 또 다른 이유는 바이너리를 난독 처리하는 경우입니다. 난독 처리자는 내부 클래스의 클래스 이름을 스크램블하는 것이 안전하다는 것을 알고 있지만 공용 클래스의 이름은 기존 참조를 해독할 수 있으므로 스크램블링할 수 없습니다. 이름이 없는 로컬 내부 클래스를 익명 내부 클래스라고 합니다. 익명 클래스는 단일 문으로 정의되고 인스턴스화됩니다. 내부 클래스의 멤버선언은 이름이 같은 경우 둘러싸는 클래스의 멤버를 그림자로 지정합니다. 내부 클래스는 정적일 수도 있으므로 외부 클래스의 개체를 만들지 않고도 액세스할 수 있습니다.