📚Study Note/JAVA
[ JAVA ] 클래스 고급 - 중첩 클래스 ③
칠칠라
2021. 3. 29. 01:02
//외부클래스
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*/
}
}