//내부 클래스와 익명 클래스
//내부(inner)클래스는 클래스 안에 또 다른 클레스를 선언하는 것
//두클래스의 멤버에 쉽게 접근할 수 있다.
//코드가 장황해지는 단점이 있기때문에 별로사용되지않음
//익명(anonymous) 클래스는 이름이 없는 글래스로 주로 메서드를 재정의 하는 목적으로 사용
//간간히 쓰인다.
//MainClass.java
public class MainClass {
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();
//멤버 inner 클래스
OuterClass.InnerClass in = oc.new InnerClass();
System.out.println("in.num : "+ in.num);
System.out.println("in.str2 : "+ in.str2);
System.out.println();
//static inner 클래스
OuterClass.SInnerClass si = new OuterClass.SInnerClass();
System.out.println("in.num : "+ si.num);
System.out.println("in.str3 : "+ si.str3);
System.out.println();
// 익명(anonymous) 클래스
new AnonymousClass() {
@Override
public void method() {
System.out.println(" -- AnnonymousClass's Override method START --");
};
}.method();
}
}
//복잡해지면 꼬일수있는가능성이큼
//OuterClass.java
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 constuctor");
}
}
static class SInnerClass {
int num = 1000;
String str3 = str11;
public SInnerClass() {
System.out.println("static InnerClass contructor");
}
}
}
//인터페이스나 추상클래스에서 주로 사용
//AnonymousClass.java
public class AnonymousClass {
public AnonymousClass() {
System.out.println("AnonymousClass constructor");
}
public void method() {
System.out.println(" ---- AnonymousClass's method START -- ");
}
}
결과값
OuterClass constructor
oc.num : 10
oc.str1 : java
InnerClass constuctor
in.num : 100
in.str2 : java
static InnerClass contructor
in.num : 1000
in.str3 : world
AnonymousClass constructor
-- AnnonymousClass's Override method START --
'Develop > JAVA' 카테고리의 다른 글
JAVA 추상클래스 (0) | 2023.10.17 |
---|---|
JAVA 인터페이스 (0) | 2023.10.17 |
JAVA 상속 특징 (0) | 2023.10.17 |
JAVA 상속 (0) | 2023.10.17 |
JAVA 기초 반복문(for,while,do~while) (0) | 2023.10.16 |