티스토리 뷰
class OuterClass{ //외부 클래스
...
class NestedClass{ // 중첩 클래스
...
}
}
외부 클래스: 내부에 클래스를 가지고 있는 클래스
중첩 클래스: 클래스 내부에 포함되는 클래스
중첩 클래스 종류

정적 중첩 클래스: 앞에 static 이 붙어서 내장되는 클래스
비정적 중첩 클래스: static 이 붙지 않은 일반적인 중첩 클래스
- 내부 클래스: 클래스의 멤버처럼 선언되는 중첩 클래스
- 지역 클래스: 메서드의 몸체 안에서 선언되는 중첩 클래스
- 익명 클래스: 수식의 중간에서 선언되고 바로 객체화되는 클래스
내부 클래스(inner class)
클래스 안에 클래스를 선언한다.
외부 클래스의 인스턴스 변수와 메서드를 전부 사용할 수 있다.
private 로 선언되어 있어도 접근이 가능하다는 장점이 있다.
예시)


내부 클래스의 객체는 외부 클래스의 객체가 먼저 생성되어 있어야 생성할 수 있다.
지역클래스(local class)
메서드 안에 정의되는 클래스
이 메서드는 접근 제어 지정자를 가질 수 없다.
지역 클래스는 abstract 또는 final로만 지정할 수 있다.
외부 클래스의 인스턴스 변수뿐만 아니라 메서드의 지역변수에도 접근할 수 있다.
하지만 지역변수는 반드시 final로 선언되어야 한다.
예시)


중첩 클래스를 사용하는 이유
|

익명 클래스
클래스를 정의하면서 동시에 객체를 생성한다.
이름이 없기 때문에 한 번만 사용이 가능하다.
하나의 객체만 생성하면 되는 경우에 많이 사용된다.
부모 클래스에서 상속을 받아서 작성하거나 인터페이스를 구현하여서 작성한다.
(new 키워드 다음에 부모 클래스 이름이나 인터페이스 이름을 적는다)
Class Car extends Vehicle {...}
Car obj = new Car(); // 이름이 있는 클래스
Vehicle obj = new Vehicle(){}; // 익명 클래스(클래스 정의 동시에 객체 생성)
// 부모 클래스 참조변수 = new 부모 클래스() {클래스 구현}
// 상속 받고자 하는 부모 클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 적는다.
익명 클래스도 내부 클래스와 같이 필드와 다른 메서드들을 정의할 수 있다.
다만, 메서드 안에 정의되는 지역 변수 중에서는 final로 선언된 변수만 사용이 가능하다.
주로 GUI의 이벤트 처리기를 구현하는 데 사용된다.
'Java' 카테고리의 다른 글
Java(Stack) (0) | 2024.05.19 |
---|---|
Java(자료구조 및 Collections 클래스) (0) | 2024.05.06 |
Java(String 클래스, StringBuffer 클래스, text block) (0) | 2024.05.04 |
Java(Exception(예외 처리), throws, 사용자 정의 예외) (0) | 2024.05.01 |
Java(Thread/Multi-threading/synchronization) (0) | 2024.05.01 |