목차
📢 내부 클래스
- 클래스 안에 클래스가 있는 형태
- 중첩 클래스라고 하기도 한다.
🎪 내부 클래스 특징
- 내부 클래스에서 외부 클래스 멤버 접근 가능
- 외부에서는 내부 클래스를 접근할 수 없다.
📢 내부 클래스 종류
🎪 인스턴스 클래스(Instance)
- 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지지 않는 클래스
- 인스턴스 클래스는 주로 외부 클래스(outer class)의 인스턴스 변수나 인스턴스 메소드에 사용
class Outer{
public void Print(){
System.out.println("Outer.print");
}
}
public class Main {
public static void main(String[] args) {
// 외부 클래스
Outer o1 = new Outer();
}
}
🎪 정적 클래스(static)
- 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지는 클래스
- 정적 클래스는 주로 외부 클래스(outer class)의 클래스 메소드에 사용될 목적으로 선언
class Outer{
public void Print(){
System.out.println("Outer.print");
}
//static 클래스
static class InnerStatic{
public void innerPrint(){
}
}
}
public class Main {
public static void main(String[] args) {
// 내부 클래스 - 정적
Outer.InnerStatic is1 = new Outer.InnerStatic();
}
}
🎪 지역 클래스(local)
- 외부 클래스의 메소드나 초기화 블록에 선언된 클래스를 의미
- 지역 클래스는 선언된 블록 내에서만 사용
class Outer{
public void Print(){
System.out.println("Outer.print");
}
//이너 클래스
class Inner{
public void innerPrint(){
Outer.this.Print();
}
}
}
public class Main {
public static void main(String[] args) {
// 내부 클래스 - 인스턴스
Outer.Inner i1 = new Outer().new Inner();
}
}
🎪 익명 클래스(anonymous)
- 다른 내부 클래스와는 달리 이름을 가지지 않는 클래스를 의미
- 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성하는 일회용 클래스이다.
- 생성자를 선언할 수도 없으며, 오로지 단 하나의 클래스나 단 하나의 인터페이스를 상속받거나 구현한다.
abstract class Person{
public abstract void PrintInfo();
}
class Student extends Person{
public void PrintInfo(){
System.out.println("Student.PrintInfo");
}
}
public class Main {
public static void main(String[] args) {
// 익명 클래스
Person p1 = new Person() {
@Override
public void PrintInfo() {
System.out.println("Person.PrintInfo");
}
};
}
}
반응형
'Java' 카테고리의 다른 글
[Java] 람다식과 스트림 (0) | 2023.08.10 |
---|---|
[Java] 인터페이스 (0) | 2023.08.09 |
[Java] 추상클래스 (0) | 2023.08.09 |
댓글