* 중첩 클래스(inner class)
1. 클래스 내부에 또 다른 클래스 선언
==> 두 클래스가 서로 긴밀한 관계로 연결되어 있는 경우 사용.
두 클래스 멤버 간에 서로 쉽게 접근할 수 있다는 장점이 있음.
2. 내부 클래스를 하나의 멤버로 사용할 수 있음.
3. 클래스 멤버 : 멤버 변수, 멤버 메소드, 외부 클래스, 내부 클래스
4. 내부 클래스 객체 생성 방법
형식) 외부클래스명.내부클래스명 참조변수 = 외부클래스의 참조변수.new 내부클래스 생성자();
* [내부 클래스의 특징]
- 내부 클래스는 외부 클래스의 멤버를 마치 자기 자신처럼 사용 가능함.
외부 클래스 멤버의 접근 지정자가 private 접근 지정자일지라도 접근 가능.
- 내부 클래스의 접근은 반드시 외부 클래스를 통하여 접근해야 함.
* 다양한 형태의 클래스 선언 방법
1. 일반적인 선언 방법
==> 하나의 자바 파일에 class 키워드를 작성하여 클래스 선언.
2. 무명 클래스(anonymous class) 선언
==> 이름이 없이 없는 클래스 선언. interface 객체 생성 시 많이 사용됨.
3. 중첩 클래스(inner class) 선언
==> 클래스 안에 또 다른 클래스 선언
예제1) interface를 무명클래스로 선언하기
interface Inter {
int sum(int n1 , int n2);
int minus(int n1, int n2);
}
class Sub implements Inter {
@Override
public int sum(int n1, int n2) {
return n1 + n2;
}
@Override
public int minus(int n1, int n2) {
return n1 - n2;
}
}
public class Ex01 {
public static void main(String[] args) {
// 1. 일반적인 선언 방법.
Sub sub = new Sub();
System.out.println("sum() 메소드 호출 >>> " + sub.sum(200, 15));
System.out.println("minus() 메소드 호출 >>> " + sub.minus(127, 15));
System.out.println();
// 2. 무명 클래스(anonymous class) 선언
Inter inter = new Inter() {
@Override
public int sum(int n1, int n2) {
return n1 + n2;
}
@Override
public int minus(int n1, int n2) {
return n1 - n2;
}
};
System.out.println("sum() 메소드 호출 >>> " + inter.sum(200, 15));
System.out.println("minus() 메소드 호출 >>> " + inter.minus(127, 15));
System.out.println();
}
}
예제2) 중첩 클래스
class Outer { //외부 클래스
int su1 = 50;
private int su2 = 36;
class Inner { // 내부 클래스
void output() {
su1 = 178;
System.out.println("su1 >>> " + su1);
System.out.println("su1 >>> " + su2);
}
}
}
public class Ex02 {
public static void main(String[] args) {
// 중첩 클래스 객체 생성 방법
// 1. 먼저 외부(Outer) 클래스 객체 생성
Outer outer = new Outer();
// 2. 내부(Inner) 클래스 객체 생성
Outer.Inner inner = outer.new Inner();
inner.output();
}
}
'Back > JAVA' 카테고리의 다른 글
래퍼 클래스(wrapper class) (0) | 2021.03.16 |
---|---|
싱글턴(singleton) 방식으로 객체 생성하기★★★★★ (0) | 2021.03.16 |
오브젝트 클래스 (Object Class) (0) | 2021.03.16 |
String Class의 특징 및 주요 메서드(StringBuffer, StringTokenizer) (0) | 2021.03.16 |
Util 패키지 - Random, Math, Calendar, Arrays (0) | 2021.03.15 |