Inner class
Inner class 란?
- 클래스 안에 클래스를 가지고 있는 구조
- has a 관계는 항상 객체가 독립적이지만 inner class는 애초에 클래스 안에 클래스를 가진다.
- outer class의 ( private이든 뭐든 )멤버를 자유롭게 사용할 수 있다.
- 이벤트 처리할때 많이 쓰인다.
- outer class를 생성한 후, inner class를 따로 생성해야 한다.
- 종류
1) member class( instance class ) -> 가장 많이 쓰임
2) static class
3) local class
4) anonymous class -> 가장 많이 쓰임, 이벤트 처리 시 주로 사용, 추상클래스와 같이 사용됨
member class
public class InnerTest {
private int a;
public InnerTest(int a) {
this.a = a;
}
class A { // member inner class
public void disp(){
System.out.println(a);
}
}
public static void main(String[] args) {
//InnerTest it = new InnerTest(100);
// InnerTest.A it1=it.new A();
InnerTest.A it1=new InnerTest(100).new A(); // 위의 두줄을 한줄로 만들기!
it1.disp();
}
}
local class
public class InnerTest {
private int a;
public InnerTest(int a) {
this.a = a;
}
public void out() { // local inner class > class가 메소드 안에 있음
class A {
public void disp() {
System.out.println(a);
}
}
A aa=new A(); //객체 밖에 객체만들기
aa.disp();
}
public static void main(String[] args) {
InnerTest it=new InnerTest(100);
it.out();
}
}
anonymous class ★
abstract class B{
abstract void disp();
}
public class InnerTest {
private int a;
public InnerTest(int a) {
this.a = a;
}
B bb=new B(){ // anonymous inner class
void disp(){
System.out.println("익명클래스"+a); // 오버라이딩으로 구체화 시키기
}
}; // 추상클래스는 객체 생성못하지만, 익명클래스를 사용하면 생성 가능하다.
public static void main(String[] args) {
InnerTest it=new InnerTest(100);
it.bb.disp();
}
}