본문 바로가기

📚Study Note/JAVA

[ JAVA ] 클래스 고급 - 중첩 클래스 ③

//외부클래스
class InnerOuterTest
{
	static int a =10;
	int b = 20;
	
	
	//내부클래스
	class InnerNested
	{
		int c =30;

		// ▶ inner의write() 메소드
		void write()
		{
			System.out.println("Inner의 write()....");
			System.out.println("a : " + a);
			System.out.println("b : " + b);
			System.out.println("c : " + c);
		}
	}
	
	// ▶ outer의 write() 메소드
	void write()
	{
		System.out.println("Outer의 write()....");
		// 내부 클래스의 인스턴스 생성
		InnerNested ob1 =new InnerNested();
		//inner write() 메소드 호출
		ob1.write();
	}
}

// main
public class Test119
{
	public static void main(String[] args)
	{
		//외부 클래스outer의 인스턴스 생성
		InnerOuterTest ob2 = new InnerOuterTest();
		// 외부 클래스의 write() 메소드 호출
		ob2.write();
		/*
		-==>>
		Outer의 write()....
		Inner의 write()....
		a : 10
		b : 20
		c : 30
		계속하려면 아무 키나 누르십시오 . . .*/

		//InnerNested ob3 =new InnerNested();
		//-==>> 에러 발생(컴파일에러)
		//InnerOuterTest.InnerNested ob4 = new InnerOuterTest.InnerNested();
		//static inner클래스가 아니므로 에러 발생(컴파일 에러)

		/*※ 중첩 내부 클래스 (static 내부 클래스)와는 달리 외부 클래스의
			인스턴스 (객체)를 사용하지 않고 단독으로 내부 클래스의 인스턴스를
			생성하는 것은 불가하다. 
			
		 ※ Test117.java와 비교할 것!*/
		 //★이 부분 특이함
		 InnerOuterTest.InnerNested ob5 = ob2.new InnerNested();
		 ob5.write();

		 //Inner의 write()....
		//a : 10
		//b : 20
		//c : 30

		InnerOuterTest.InnerNested ob6 = new InnerOuterTest().new InnerNested();
		/*Inner의 write()....
		a : 10
		b : 20
		c : 30*/

	}   
}