대표 클래스가 공통적인 속성 값만을 가지고 나머지 각기 다른 중첩된 클래스에서 관리하도록 만들기 위해서 중첩 클래스(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 |
Promotion(자동 형변환) : 큰 자료형 <- 작은 자료형
Casting(강제 형변환) : 작은 자료형 <- 큰 자료형
float fl = 20.0; // 20.0은 컴파일러에서 Double로 인식, 따라서 컴파일 에러, 20.0f는 OK
실수 > 정수
float fl = 20;
long lo = fl; // 컴파일 에러, 8바이트 long, 4바이트 float 이지만 실수 > 정수 이므로 casting 되어야 한다.
'Language > Java Language' 카테고리의 다른 글
Eclipse .class 파일 build path 에 추가할 때 (0) | 2015.03.17 |
---|---|
중첩 클래스(Nested Class) (0) | 2011.02.11 |
프로젝트에 마우스 오른쪽 클릭 - import -[General - File System] - 추가할 라이브러리 추가 - Finish
- 프로젝트에 마우스 오른쪽 클릭 - 속성 - Java Build Path - Add JARs - 라이브러리 선택 - OK - Finish
'Mobile > Android Programming' 카테고리의 다른 글
컴파일에러 (0) | 2011.02.24 |
---|---|
WebView에서 뒤로가기 키 (BackKey) 처리 (4) | 2011.02.22 |
requestWindowFeature 에러나는 이유 (0) | 2011.02.22 |
Android WifiLock 기능 사용하기 (0) | 2011.02.07 |
Android WakeLock 기능 (0) | 2011.02.07 |