내부(inner) 클래스와 익명(anonymous) 클래스
내부(innter) 클래스
클래스 안에 또 다른 클래스를 선언하는 것으로 이렇게 하면 두 클래스의 멤버에 쉽게 접근할 수 있다
public class OuterClass{
int num = 10;
String str1 = "java";
static String str11 = "world";
public OuterClass(){
System.out.println("OuterClass Constructor");
}
class InnerClass{
int num = 100;
String str2 = str1;
public InnerClass() {
System.out.println("InnerClass Constructor");
}
}
class SInnerClass{
int num = 1000;
String str3 = str1;
public SInnerClass() {
System.out.println("static InnerClass constructor");
}
}
}
public class MainClassTest {
public static void main(String[] args) {
OuterClass oc = new OuterClass();
System.out.println("oc.num : "+oc.num);
System.out.println("oc.str1 : "+oc.str1);
System.out.println();
OuterClass.InnerClass in = oc.new InnerClass();
System.out.println("in.num : "+in.num);
System.out.println("in.str2 : "+in.str2);
System.out.println();
OuterClass.SInnerClass si = oc.new SInnerClass();
System.out.println("si.num : "+si.num);
System.out.println("si.str2 : "+si.str3);
}
}
---- result ----
OuterClass Constructor
oc.num : 10
oc.str1 : java
InnerClass Constructor
in.num : 100
in.str2 : java
static InnerClass constructor
si.num : 1000
si.str2 : java
익명(anonymous) 클래스
이름이 없는 클래스로 주로 메서드를 재정의 하는 목적으로 사용된다
public class AnonymousClass {
public AnonymousClass() {
System.out.println("AnonymousClass Constructor");
}
public void method() {
System.out.println("--- Method ---");
}
}
public class MainClass {
public static void main(String[] args) {
new AnonymousClass() {
@Override
public void method() {
System.out.println("--- Override Method ---");
};
}.method();
}
}
---- result ----
AnonymousClass Constructor
--- Override Method ---
이름이 없다는 것은 한 번 쓰고 버린다는 의미이다
따라서 메서드를 재정의하고 뒤에서 바로 메서드를 호출한다
'Study > Java' 카테고리의 다른 글
[Java] Lambda 람다식 (0) | 2020.07.03 |
---|---|
[Java] 인터페이스와 추상클래스 (0) | 2020.07.03 |
[Java] 상속, Object & Super 클래스 (0) | 2020.07.03 |
[Java] 패키지와 static, 패키지 은닉 (0) | 2020.07.02 |
[Java] 생성자와 소멸자 그리고 this 키워드 (0) | 2020.07.02 |
댓글