Develop/JAVA

JAVA 내부(inner) 클래스와 익명(anonymous) 클래스

roalwh 2023. 10. 17. 20:50

 

//내부 클래스와 익명 클래스
//내부(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