개발용
inner class 본문
class안의 class
1. nested class (static) : 외부 클래스 만들지 않고 사용 가능, non-static 멤버를 참조할 수 없다
ex)
class OuterClass
{
private string name = "NAME";
static class NestedClass
{
public void fun_name()
{
// name(non-static)을 참조할 수 없음
}
}
}
public static void main()
{
NestedClass nsc = new OuterClass.NestedClass();
nsc.fun_name();
}
2. inner class : 반드시 외부 클래스부터 만들어야함
ex)
class OuterClass
{
class InnerClass
{
public void fun_name()
{
...
}
}
}
public static void main()
{
InnerClass innc = new OuterClass.InnerClass(); : Error!
OuterClass outc = new OuterClass();
InnerClass innc = outc.new InnerClass();
}
3. lacalClass : 메소드안의 class
메소드 안에 클래스를 설계하면 - 밖에서 인식하지 못함 => interface활용
ex)
interface LocalInf
{
void read();
}
class OuterClass
{
private String myName;
OuterClass(String name)
{
myName=name;
}
public LocalInf createLocalClassInst()
{
// class LocalClass
// {
// public void read()
// {
// System.out.println("Outer inst name: "+myName);
// }
// }
// return new LocalClass(); : createLocalClassInst()의
return형 LocalInf -> LocalClass --- Error! 메소드가 끝나면 class가 사라지므로 return형에 LocalClass 접근할 수 없음. -> interface 사용
// class LocalClass implements LocalInf //LocalClass이름이 필요가 없음
// {
// public void read() : 구현
// {
// System.out.println("Outer inst name: "+myName);
// }
// }
// return new LocalClass();
return new LocalInf() //Annonymous class
{
public void read() //구현
{
System.out.println("Outer inst name: "+myName);
}
};
} //.reateLocalClassInst() end
} //.OuterClass end
class LocalClassTest
{
public static void main(String[] args)
{
OuterClass out1=new OuterClass("First"); //Outer Class객체부터 생성해야 함
LocalInf localInst1=out1.createLocalClassInst();
localInst1.read();
}
}
*cf. LocalClass
interface Readable
{
public void read();
}
class OuterClass
{
private String myName;
OuterClass(String name)
{
myName=name;
}
public Readable createLocalClassInst(final int instID) //final 반드시 입력해야 그때그때 원하는 값 들어감
{
class LocalClass implements Readable
{
public void read()
{
System.out.println("Outer inst name: "+myName);
System.out.println("Local inst ID: "+instID);
}
}
return new LocalClass();
}
}
class LocalParamClassTest
{
public static void main(String[] args)
{
OuterClass out=new OuterClass("My Outer Class");
Readable localInst1=out.createLocalClassInst(111);
localInst1.read();
Readable localInst2=out.createLocalClassInst(222);
localInst2.read();
}
}
'개발 > JAVA' 카테고리의 다른 글
예외처리 Exception (0) | 2016.11.10 |
---|---|
Interface, Abstract, 추상 클래스, 추상 메소드 (0) | 2016.11.10 |
Random (0) | 2016.11.10 |
static 멤버 (0) | 2016.11.10 |
Array : 기본형과 객체 차이 (0) | 2016.11.10 |