728x90
반응형
SMALL
중첩 클래스
중첩 클래스란 클래스 내부에 선언한 클래스
=>클래스의 멤버를 쉽게 사용할 수 있고 외부에는 중첩 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.
선언 위치에 따른 분류 | 선언 위치 | 객체 생성 조건 | |
멤버 클래스 | 인스턴스 멤버 클래스 |
class A{ class B{ ... } } |
A 객체를 생성해야만 B 객체를 생성할 수 있음 |
정적 멤버 클래스 |
class A{ static class B{ ... } } |
A 객체를 생성하지 않아도 B 객체를 생성할 수 있음 |
|
로컬 클래스 | class A{ void method(){ class B{ ... } } } |
method가 실행할 때만 B객체를 생성할 수 있음 |
중첩 클래스도 하나의 클래스이기 때문에 컴파일하면 바이트코드 파일(.class)이 별도로 생성된다.
파일의 이름은 다음과 같이 결정된다.
A $ B .class (A: 바깥 클래스. B: 멤버 클래스)
A $1 B .class (A: 바깥 클래스. B: 로컬 클래스)
인스턴스 멤버 클래스
[public] class A{
[public | private] class B{
...
}
}
인스턴스 멤버 클래스 사용
A a = new A();
A.B b = a.new B();
A.B b = new A().new B();
정적 멤버 클래스
[public] class A{
[public | private] static class B{
...
}
}
정적 멤버 클래스 사용
A.B b = new A.B();
로컬 클래스
생성자 또는 메소드 내부에서 다음과 같이 선언된 클래스
[public] class A{
//생성자
public A(){
class B {}
}
//메소드
public void method(){
class B {}
}
}
* 로컬 변수를 로컬 클래스에서 사용할 경우 로컬 변수는 final 특성을 갖게 되므로 값을 읽을 수만 있고 수정할 수 없게 된다.
바깥 멤버 접근
바깥 클래스의 멤버 접근 제한
구분 | 바깥 클래스의 사용 가능한 멤버 |
인스턴스 멤버 클래스 | 바깥 클래스의 모든 필드와 메소드 |
정적 멤버 클래스 | 바깥 클래스의 정적 필드와 정적 메소드 |
바깥 클래스의 객체 접근
바깥클래스이름.this => 바깥객체
중첩 인터페이스
중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다.
클래스 내부에 선언하는 이유는 해당 클래스와 긴밀한 관계를 맺는 구현 객체를 만들기 위해서이다.
class A{
[public | private] [static] interface B{
//상수 필드
//추상 메소드
//디폴트 메소드
//정적 메소드
}
}
익명 객체
익명(Anonymous)객체는 이름이 없는 객체를 말한다.
익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.
익명 자식 객체
부모클래스를 상속받아 생성.
new 부모생성자(매개값, ...){
//필드
//메소드
}
익명 구현 객체
인터페이스를 구현해서 생성. 보통 안드로이드와 같은 UI 프로그램에서 이벤트를 처리하는 객체로 많이 사용된다.
new 인터페이스(){
//필드
//메소드
}
728x90
반응형
LIST
'IT > JAVA' 카테고리의 다른 글
[JAVA] #11 예외 처리 (0) | 2023.04.19 |
---|---|
[JAVA] #10 라이브러리 모듈 (0) | 2023.04.18 |
[JAVA] #8 인터페이스 (0) | 2023.04.14 |
[JAVA] #7 상속 (0) | 2023.04.11 |
[JAVA] #6 클래스(Class)-2 (0) | 2023.04.10 |