//외부클래스
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*/
}
}
'📚Study Note > JAVA' 카테고리의 다른 글
[ JAVA ] System.out.printf("%1$d + %1$d, 55); %d 앞에 $1을 붙이게 되면? (0) | 2021.05.13 |
---|---|
[ JAVA ] 클래스 고급 - 중첩 클래스 ④ (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 중첩 클래스 ② (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 중첩 클래스 (0) | 2021.03.29 |
[ JAVA ] 클래스 고급 - 인터페이스(Interface) ⑤ (0) | 2021.03.29 |