728x90
: 클래스 내에 또 다른 클래스를 구성하는 것
[public/final/abstract] class A { //외부클래스, Outer클래스, Top-level 클래스
static int su = 100;
//1차자원 정의
[접근제한자4개, static가능] class B {// 내부클래스, Inner클래스
//2차 자원정의
System.out.println(su); //외부클래스 su에 static 선언 후 사용
}
}
- 클래스 접근제한자로 public, default, final, abstract만 가능하지만 중첩클래스는 멤버이기에 접근제한자 네개와 static까지 모두 사용할 수 있음.
- 내부클래스는 외부클래스에서 static이 붙은 자원을 모두 자기것으로 사용함.
- 외부클래스가 내부클래스 안에있는 기능을 사용하기위해선 객체생성을 해줘야함.
- 파일 저장방식
A.java → 컴파일(javac) → A.class와 A$B.class 생성 // $ 뒤에있는건 내부클래스
종류
정적 중첩 클래스
: static이 선언된 내부클래스. 외부자원을 사용할 때 static 붙는 인스턴스만 접근가능
비정적 중첩 클래스
: static이 선언되지 않은 내부클래스. 보통 Inner클래스라고 함.
class NestingClass {// 외부클래스
int i = 11;
void hello() {
System.out.println("안녕");
//외부클래스 -->내부클래스 자원 사용
//nested.print(); --> 오류. 객체생성 후 내부클래스의 기능을 가져올수있다
Nested nested = new Nested();//객체생성
nested.print();
}
class Nested {// 내부클래스
int j = 22;
void print() {
System.out.println("프린트");
}
//외부클래스 자원사용
void callTest() {
hello();
System.out.println("i=" + i);
}
}// Nested
}// NestingClass
public class NestedClassTest {// 내부클래스에 대한 테스트
public static void main(String[] args) {
//외부클래스 - int i , hello() , 내부클래스
//내부클래스 - int j , print()
NestingClass nesting = new NestingClass();
nesting.hello();//외부클래스의 메소드 호출
//내부클래스의 메소드를 main()에서 직접 호출 (잘 안씀)
//객체생성: 외부클래스명.내부클래스명 참조변수명 = new 외부생성자().new 내부생성자();
NestingClass.Nested nested = new NestingClass().new Nested();
nested.print();
}
}
'Web develop > JAVA' 카테고리의 다른 글
[JAVA] 자바 GUI Event 처리 방법 (0) | 2019.04.30 |
---|---|
[JAVA] 자바 GUI (0) | 2019.04.29 |
[JAVA] 자바 예외처리(Exception) 예제 (0) | 2019.04.26 |
[JAVA] 자바 String 클래스 종류 및 사용법 (0) | 2019.04.25 |
[JAVA] 자바 클래스 객체생성법 (0) | 2019.04.24 |