내부클래스(inner class)
클래스 안의 클래스
내부클래스는 외부클래스로 바로 접근 가능, 단 static 내부클래스는 외부클래스에 접근 불가
코드가 복잡해보일 수 있기때문에 잘 쓰지는 않음
public class No8_InnerClass {
int num = 100;
static String str1 = "hello";
public No8_InnerClass() {
System.out.println("OuterClass Constructor");
}
// 내부클래스1
class InnerClass {
int num = 200;
String str2 = str1; // 내부클래스는 외부클래스 멤버 접근가능
// 내부클래스1 생성자
public InnerClass() {
System.out.println("InnerClass Constructor");
}
}
// 내부클래스2(static)
static class SInnerClass {
int num = 300;
String str3 = str1;
// String str4 = str2; static 클래스는 외부클래스 멤버에 접근불가
// 내부클래스2 생성자
public SInnerClass() {
System.out.println("Static InnerClass Contructor");
}
}
}
익명클래스(anonymous class)
이름이 없는 클래스
목적 : 메소드 재정의, 인터페이스나 추상클래스에서 주로 이용
이름이 없기때문에 오버라이드 하자마자 호출하고 바로 버려지게 된다
public class No8_AnonymousClass {
public No8_AnonymousClass() {
System.out.println("AnonymousClass Constructor");
}
public void anonyMethod() {
System.out.println("----- anonyMethod start----");
}
}
내부클래스 & 익명클래스의 실행클래스
public class No8_InnerClassAnonymousClass_Ex {
public static void main(String[] args) {
No8_InnerClass obj1 = new No8_InnerClass();
System.out.println("obj1.num :"+ obj1.num);
System.out.println("obj1.str1 :"+ obj1.str1);
System.out.println();
// 내부클래스1
No8_InnerClass.InnerClass inner = obj1.new InnerClass();
System.out.println("inner.num : "+ inner.num);
System.out.println("inner.str2 : "+ inner.str2);
System.out.println();
// 내부클래스2(static)
// No8_InnerClassAnonymousClass.SInnerClass Sinner = obj1.new SInnerClass(); static이라서 안됨
No8_InnerClass.SInnerClass SInner = new No8_InnerClass.SInnerClass();
System.out.println("SInner.num : "+ SInner.num);
System.out.println("SInner.str3 : "+ SInner.str3);
System.out.println();
// 익명(anonymous)클래스
new No8_AnonymousClass() {
// override
public void anonyMethod() {
System.out.println("--- Override anonyMethod---");
}
}.anonyMethod(); //이름이 없기때문에 바로호출, 한번 쓰고 버림
}
}
'Java' 카테고리의 다른 글
[Java] 비트연산 (0) | 2021.07.29 |
---|---|
[Java] 인터페이스 (0) | 2021.07.27 |
[Java] 상속 메소드 오버라이드, 자료형, super 클래스 (0) | 2021.07.24 |
[Java] static과 private, Getter&Setter (0) | 2021.07.24 |
[Java] 객체, 클래스, 오버로딩 (0) | 2021.07.24 |