11 내부클래스
2023. 2. 2. 16:55ㆍ자바
> 내부 클래스?
: 클래스 in 클래스 (클래스 안에 선언한 클래스)
- class 이름 {
class 이름 {
}
}
- 내부 클래스에서 외부 클래스 멤버에 접근 가능하지만 역은 안됨
> 종류?
- instance class : 위와 같은 형태의 클래스
- static class: 내부 클래스에 static이 붙어 메모리에 바로 상주하는 것으로, 바깥쪽 클래스가 만들어지지 않아도 사용할 수 있는 클래스
- local class: 클래스 안 메소드 안에 클래스가 존재
- anonymous class: 이름을 가지지 않는 클래스. 선언과 동시에 객체 생성. 일회용 클래스
클래스이름 참조변수이름 = new 클래스 이름() { ... };
package InsideClass;
class Outer {
public void print() {
System.out.println("Outer class");
}
class Inner {
public void innerPrint() {
Outer.this.print();
}
}
static class InnerStaticClass {
void innerPrint() {
/*
이 클래스는 static으로 Outer클래스가 만들어지지 않아도 이 static클래스는 처음부터 메모리에 상주된다.
*/
// Outer.this.print(); // 그래서 메모리에 이 클래스가 올라가더라도 Outer클래스가 올라가지 않아서 바로 사용 못함
// 즉, 정적내부클래스는 외부로 접근 불가능함!!!
}
}
}
abstract class Person {
public abstract void printInfo();
}
class Student extends Person {
@Override
public void printInfo() {
System.out.println("Student.printInfo");
}
}
public class InsideClass {
public static void main(String[] args) {
// 1. 외부 클래스
Outer o1 = new Outer();
// 2. 내부 클래스 = instance클래스
Outer.Inner i1 = new Outer().new Inner();
// 3. 정적 클래스
Outer.InnerStaticClass is1 = new Outer.InnerStaticClass();
// 4. 익명 클래스
Person p1 = new Person() {
@Override
public void printInfo() {
System.out.println("Main.printInfo");
}
};
}
}
'자바' 카테고리의 다른 글
Stream API (0) | 2023.02.28 |
---|---|
practice1~5 (0) | 2023.02.02 |
10 인터페이스 (0) | 2023.02.02 |
9 추상클래스 (0) | 2023.02.02 |
8 다형성(Polymorphism) ★ (0) | 2023.02.02 |