JAVA
Test126.java / 클래스 고급 - 중첩 클래스 / 중첩 클래스 적용 및 실습
universedevelope
2022. 10. 23. 09:55
class InnerOuterTest
{
static int a = 10;
int b = 20;
class InnerNested
{
int c = 30;
void write() // inner 의 write()
{
System.out.println("inner 의 write()...");
System.out.println("a : " + a);
System.out.println("b : " + b);
System.out.println("c : " + c);
}
}
void write() // outer 의 write()
{
System.out.println("outer 의 write()...");
InnerNested ob1 = new InnerNested();
ob1.write(); // inner 의 write() 메소드 호출
}
}
// main 클래스
public class Test126
{
public static void main(String[] args)
{
InnerOuterTest ob2 = new InnerOuterTest();
ob2.write(); // outer의 write()메소드 호출
/*
outer 의 write()...
inner 의 write()...
a : 10
b : 20
c : 30
*/
//InnerNested ob3 = new InnerNested();
// 에러 발생
//InnerOuterTest.InnerNested ob3 = new InnerOuterTest.InnerNested();
// 에러 발생
// 중첩 내부 클래스(static 중첩 클래스)와는 달리
// 외부 클래스의 인스턴스 (객체)를 사용하지 않고
// 단독으로 내부 클래스의 인스턴스를 생성하는 것은불가능하다.
// → 외부 클래스의 객체를 사용하면 내부 클래스의 객체를 생성하는 것이 가능.
// Test124.java 파일과 비교할것!!
InnerOuterTest.InnerNested ob5 = ob2.new InnerNested();
ob5.write();
/*
inner 의 write()...
a : 10 ↑ 같은
b : 20 ↓ 문장
c : 30
*/
InnerOuterTest.InnerNested ob6 = new InnerOuterTest().new InnerNested();
// ------------------
// └> ob2로 이미 선언됨
ob6.write();
/*
inner 의 write()...
a : 10
b : 20
c : 30
*/
/*
outer 클래스명.inner클래스명 참조변수명 = new outer생성자().new inner 생성자();
*/
/*
cf static → 중첩 내부 클래스
outer클래스명.inner클래스명 참조변수명 = new outer클래스명.inner생성자();
*/
}
}
728x90