JAVA 입문 시작

22.11.30 내부클래스

강준석 2022. 11. 30. 14:14
728x90

말그대로

클래스안에 클래스를 만드는것

 

요런식으로 만듬

public class A{
	public calss B {
    
    }
 }

 

 

package 내부클래스;

public class A {
	
	A() {
		System.out.println("A 객체 생성");
	}
	
	/** B클래스 시작 **/
	
	static class B {//내부에 새로운 클래스 생성
		//아래 있는 코드는 B라는 내부 클래스 안에 있는 것
		
		B() {
			System.out.println("B 객체 생성");
		}
		
		int var1;
		static int var2;
		
		void method1() {
			System.out.println("static 내부 클래스의 메서드1");
		}
		
		static void method2() {
			System.out.println("static 내부 클래스의 static 메서드2");
		}
		
	}
	
											/** B클래스 끝 **/
	
	/** C클래스 시작 **/
	
	public class C {
		C() {
			System.out.println("C 객체 생성");
		}
		
		int var1;
		
		void method() {
			System.out.println("C 클래스의 메서드");
		}
	}
	
							/** C클래스 끝 **/
	
	
	/** method() 메서드 시작 **/
	
	void method() {
		
		/** D클래스 시작 **/
		class D {
			D() {
				System.out.println("D 객체 생성");
			}
			
			int var1;
			
			void method() {
				System.out.println("C 클래스의 메서드");
			}
			
		} 							/** D클래스 끝 **/
		
		D d = new D();
		d.var1 = 3;
		d.method();
	}
							/** method() 메서드 끝 **/
	
									

}

 

package 내부클래스;

import java.lang.reflect.Method;

public class Main {

	public static void main(String[] args) {
		
		A a = new A();
		
		A.B b = new A.B();	// A클래스 안에 B클래스 b 객체 생성(A.B b)
		
		b.var1 = 3;
		b.method1();
		A.B.var2 = 3;			//A.B.var2 = 3; 와 같다
		A.B.method2();		    //A.B.method2(); 와 같다

		
		A.C c = a.new C();
		
		c.var1 = 3;
		c.method();
		
		a.method();
	}

}

결과

 

A 객체 생성
B 객체 생성
static 내부 클래스의 메서드1
static 내부 클래스의 static 메서드2
C 객체 생성
C 클래스의 메서드
D 객체 생성
C 클래스의 메서드

 

 

내부인터페이스

예시)

 

메인문

package 내부인터페이스;

public class Main {

	public static void main(String[] args) {
		
		Outer out = new Outer();
		InterfaceExImple a = new InterfaceExImple();
		
		
		out.setInterfaceEx(new InterfaceExImple() );
		out.outerMethod();
		
		
	}

}

기본문안에 인터페이스 문

package 내부인터페이스;

public class Outer {

		interface InterfaceEx {
			void method();
			
		}
		
		InterfaceEx ie;
		
		void setInterfaceEx(InterfaceEx ie) {
			this .ie = ie;
		}
		
		void outerMethod() {
			ie.method();
		}
		
}

이건 뭔 개소리야;;

728x90