inner class는
class 안에 class를 생성하여
클래스 안에서만 사용하도록 하는 일종의 임시 객체이다.
inner class
- staic inner class
method class
anonymous class
inner Class의 제약사항
[링크 : http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()]
[링크 : http://jnylove.tistory.com/182] Object.hasCode()
[링크 : http://happystory.tistory.com/64] 익명 클래스
class 안에 class를 생성하여
클래스 안에서만 사용하도록 하는 일종의 임시 객체이다.
inner class
- staic inner class
method class
anonymous class
inner Class의 제약사항
변수 중에 static이 하나라도 있으면 static class가 되어야 함
method 안에서 선언할 경우 Local Class라 하며,
static 멤버 변수가 선언될 수 없으며 또한, static Local Class가 될 수 없다.
outer.this.var 식으로 inner 클래스의 외부 클래스 변수에 접속할 수 있다.
inner class에서 static 변수에는 (외부 클래스의) static 변수만이 할당가능하다.
public class InnerEx2 {
class InstanceInner {
}
static class StaticInner {
}
InstanceInner iv = new InstanceInner();
static StaticInner cv = new StaticInner();
static void staticMethod()
{
StaticInner obj2 = new StaticInner();
// InstanceInner obj1 = new InstanceInner();
InnerEx2 outer = new InnerEx2();
InstanceInner obj1 = outer.new InstanceInner();
}
} |
내부 클래스에서 다른 내부 클래스를 선언시
외부 클래스.new 내부 클래스(); 식으로 선언할 수 있다.
void myMethod()
{
int lv = 0;
final int LV = 0;
class LocalInner {
int liv = outerIv;
int liv2 = outerCv;
// int liv3 = lv; <<
int liv4 = LV;
}
}
|
method내의 Local Class에서는 메소드 내의 변수를 사용할 수 없다.
(메소드가 메모리에 올라가서 구획이 생성되기 전이기에)
Object iv = new Object() {void method() {}};
anonymous class 에서의 메소드 정의
public static void main(String[] args)
{
// TODO Auto-generated method stub
Button b = new Button("Start");
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("ActionEvent occurred!!!");
}
});
} |
instanceof
객체 instanceof class 식으로 사용하며, 상속관계에 있을 경우
해당 객체가 상위 객체를 포함하므로 instanceof에서 true가 되지만
상위 객체를 하위 객체로instanceof 할 경우 false가 된다.
[링크 : http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()]
[링크 : http://jnylove.tistory.com/182] Object.hasCode()
[링크 : http://happystory.tistory.com/64] 익명 클래스
'Programming > Java' 카테고리의 다른 글
java generic (0) | 2014.03.18 |
---|---|
java static import (0) | 2014.03.17 |
java private constructor (0) | 2014.03.14 |
java abstract / interface & cpp virtual (0) | 2014.03.14 |
Java / cpp - 다형성(polymorphism) 차이점 (동적 바인딩?) (0) | 2014.03.13 |