자바 튜토리얼

자바 홈 자바 소개 자바 시작하기 자바 구문 자바 주석 자바 변수 자바 데이터 유형 자바 타입 캐스팅 자바 연산자 자바 문자열 자바 수학 자바 부울 자바 If...Else 자바 스위치 자바 while 루프 자바 For 루프 자바 중단/계속 자바 배열

자바 메소드

자바 메소드 자바 메소드 매개변수 자바 메소드 오버로딩 자바 범위 자바 재귀

자바 클래스

자바 OOP 자바 클래스/객체 자바 클래스 속성 자바 클래스 메소드 자바 생성자 자바 수정자 자바 캡슐화 자바 패키지 / API 자바 상속 자바 다형성 자바 내부 클래스 자바 추상화 자바 인터페이스 자바 열거형 자바 사용자 입력 자바 날짜 자바 배열 목록 자바 링크드리스트 자바 해시맵 자바 해시셋 자바 반복자 자바 래퍼 클래스 자바 예외 자바 정규식 자바 스레드 자바 람다

자바 파일 처리

자바 파일 Java 파일 작성/쓰기 자바 읽기 파일 자바 삭제 파일

자바 방법

두 개의 숫자 더하기

자바 참조

자바 키워드 자바 문자열 메소드 자바 수학 메소드

자바 예제

자바 예제 자바 컴파일러 자바 연습 자바 퀴즈 자바 인증서


자바 내부 클래스


자바 내부 클래스

Java에서는 클래스(클래스 내의 클래스)를 중첩할 수도 있습니다. 중첩 클래스의 목적은 함께 속한 클래스를 그룹화하여 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만드는 것입니다.

내부 클래스에 액세스하려면 외부 클래스의 객체를 생성한 다음 내부 클래스의 객체를 생성합니다.

예시

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Outputs 15 (5 + 10)


프라이빗 이너 클래스

"일반" 클래스와 달리 내부 클래스는 private또는 protected. 외부 객체가 내부 클래스에 액세스하는 것을 원하지 않으면 클래스를 private다음 과 같이 선언하십시오.

예시

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

외부 클래스에서 private 내부 클래스에 액세스하려고 하면 오류가 발생합니다.

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^



정적 내부 클래스

내부 클래스도 static, 즉 외부 클래스의 객체를 생성하지 않고 액세스할 수 있음을 의미합니다.

예시

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Outputs 5

참고:static 속성 및 메서드와 마찬가지로 static내부 클래스는 외부 클래스의 멤버에 액세스할 수 없습니다.


내부 클래스에서 외부 클래스 액세스

내부 클래스의 한 가지 장점은 외부 클래스의 속성과 메서드에 액세스할 수 있다는 것입니다.

예시

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Outputs 10