JAVA/상속
Test129 중첩 클래스(내부 클래스) - 지역 클래스(로컬 클래스, local class)
ready J
2020. 9. 11. 13:45
3. 지역 클래스(로컬 클래스, local class)
메소드 내부에... 『public class 클래스명』 or 『public static class 클래스명』
- 클래스의 메소드 안에서 클래스를 정의하는 것으로 내부 멤버 클래스와 유사한 성격을 가지고 있긴 하지만 접근제어지시자는 붙일 수 없다.
지역 클래스(로컬 클래스, local class)의 예시
/*===========================
■■■ 클래스 고급 ■■■
- 중첩 클래스(내부 클래스)
=============================*/
// outer
class InnerOuterTest
{
static int a = 10;
int b = 20;
class InnerNested
{
int c = 30;
void write()
{
System.out.println("inner 의 write()...");
System.out.println("a : " + a);
System.out.println("b : " + b);
System.out.println("c : " + c);
}
}
void write()
{
System.out.println("outer 의 write()...");
InnerNested ob1 = new InnerNested();
ob1.write(); //-- inner 의 write() 메소드 호출
}
}
public class Test129
{
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 ob4 = new InnerOuterTest.InnerNested();
//--==>> 에러 발생
// ※ 중첩 내부 클래스(static 중첩 클래스)와는 달리
// 외부 클래스의 인스턴스(객체)를 사용하지 않고
// 단독으로 내부 클래스의 인스턴스를 생성하는 것은 불가능하다.
// ※ Test127.java 파일과 비교할 것~!!!
InnerOuterTest.InnerNested ob5 = ob2.new InnerNested();
ob5.write();
//--==>> inner 의 write()...
// a : 10
// b : 20
// c : 30
InnerOuterTest.InnerNested ob6 = new InnerOuterTest().new InnerNested();
ob6.write();
//--==>> inner 의 write()...
// a : 10
// b : 20
// c : 30
}
}