대표 클래스가 공통적인 속성 값만을 가지고 나머지 각기 다른 중첩된 클래스에서 관리하도록 만들기 위해서 중첩 클래스(Nested Class)의 필요성이 생긴다.
예)
중첩클래스에서의 내부클래스에서 멤버 접근 법
정적 중첩 클래스
일반 중첩 클래스와는 달리 Outer클래스의 객체가 없어도 Inner클래스의 객체를 만들 수 있다.
정적 중첩클래스는 내부 클래스에 static이라는 예약어만 붙이면 된다.
익명 중첩 클래스
지역 중첩클래스의 변형된 형태라 할 수 있다.
class라는 예약어와 클래스명을 가지지 않고 단지 인스턴스의 생성과 내용부의 정의만 가진다.
중첩 클래스는 이미 기존에 존재하는 것이어야 한다.
예)
class Person{ private String name; private String jumin; ..... class Grade { private int kor, eng, math, total; private float average; ..... } }
중첩클래스의 접근 방법
Person person = new Person(); // 외부 클래스(Outer Class) 객체 생성 Person.Grade grade = person.new Inner(); // 내부 클래스(Inner Class) 객체 생성
중첩클래스에서의 내부클래스에서 멤버 접근 법
class Outer{ private static int x = 1; class Inner{ private int x = 2; public void func(){ System.out.println(Outer.x); // 1 출력 System.out.println(this.x); // 2 출력 } } }
정적 중첩 클래스
일반 중첩 클래스와는 달리 Outer클래스의 객체가 없어도 Inner클래스의 객체를 만들 수 있다.
Outer.Inner temp = new Outer.Inner();
정적 중첩클래스는 내부 클래스에 static이라는 예약어만 붙이면 된다.
Outer.Inner 객체 = new Outer.Inner();
지역 중첩 클래스
메서드를 실행할 때에만 필요하고 별로 사용할 경우가 없다면 굳이 외부에 드러나는 형태로 만들 필요가 없다. 그래서 특정 메서드에 한정적인 용도로 사용할 클래스로 지역 중첩 클래스라는 개념이 생겼다. 하지만 이 경우에는 접근 제한자(private, protected, package, public)와 지정 예약어를 사용할 수 없는 형태이다. 그 외에 나머지 기능은 클래스와 동일하다.
지정 예약어
필드 : static, final, static final, transient
메서드 : static, final, static final, abstract, synchronized, native
필드 : static, final, static final, transient
메서드 : static, final, static final, abstract, synchronized, native
public class Outer{ public static void main(String[] ar) { int x = 100; class Inner{ int y = 200; } Inner in = new Inner(); System.out.println(x); System.out.println(in.y); } }
익명 중첩 클래스
지역 중첩클래스의 변형된 형태라 할 수 있다.
class라는 예약어와 클래스명을 가지지 않고 단지 인스턴스의 생성과 내용부의 정의만 가진다.
중첩 클래스는 이미 기존에 존재하는 것이어야 한다.
class Inner{ int y = 200; public Inner(){ this.disp(); } public void disp(){} } public class abc{ public static void main(String[] ar) { final int x = 100; // final이 아닌 경우 compile-error new Inner(){ public void disp(){ System.out.println("Default 생성자"); System.out.println("x = " + x); System.out.println("y = " + y); } }; } }
참조 : 열혈강의 JAVA 프로그래밍
'Language > Java Language' 카테고리의 다른 글
Eclipse .class 파일 build path 에 추가할 때 (0) | 2015.03.17 |
---|---|
Promotion, Casting (2) | 2011.02.11 |