11 내부클래스

2023. 2. 2. 16:55자바

> 내부 클래스?

: 클래스 in 클래스 (클래스 안에 선언한 클래스)

- class 이름 {

         class 이름 {

         }

    }

 

- 내부 클래스에서 외부 클래스 멤버에 접근 가능하지만 역은 안됨

 

 


> 종류?

- instance class : 위와 같은 형태의 클래스

- static class: 내부 클래스에 static이 붙어 메모리에 바로 상주하는 것으로, 바깥쪽 클래스가 만들어지지 않아도 사용할 수 있는 클래스

- local class: 클래스 안 메소드 안에 클래스가 존재

- anonymous class: 이름을 가지지 않는 클래스. 선언과 동시에 객체 생성. 일회용 클래스

     클래스이름 참조변수이름 = new 클래스 이름() { ... };

 

 


package InsideClass;

class Outer {
    public void print() {
        System.out.println("Outer class");
    }

    class Inner {
        public void innerPrint() {
            Outer.this.print();
        }
    }

    static class InnerStaticClass {
        void innerPrint() {
            /*
                이 클래스는 static으로 Outer클래스가 만들어지지 않아도 이 static클래스는 처음부터 메모리에 상주된다.
            */
//            Outer.this.print();         // 그래서 메모리에 이 클래스가 올라가더라도 Outer클래스가 올라가지 않아서 바로 사용 못함
                                            // 즉, 정적내부클래스는 외부로 접근 불가능함!!!

        }
    }
}

abstract class Person {
    public abstract void printInfo();
}

class Student extends Person {

    @Override
    public void printInfo() {
        System.out.println("Student.printInfo");
    }
}


public class InsideClass {
    public static void main(String[] args) {
        // 1. 외부 클래스
        Outer o1 = new Outer();
        // 2. 내부 클래스 = instance클래스
        Outer.Inner i1 = new Outer().new Inner();
        // 3. 정적 클래스
        Outer.InnerStaticClass is1 = new Outer.InnerStaticClass();
        // 4. 익명 클래스
        Person p1 = new Person() {
            @Override
            public void printInfo() {
                System.out.println("Main.printInfo");
            }
        };
    }
}

'자바' 카테고리의 다른 글

Stream API  (0) 2023.02.28
practice1~5  (0) 2023.02.02
10 인터페이스  (0) 2023.02.02
9 추상클래스  (0) 2023.02.02
8 다형성(Polymorphism) ★  (0) 2023.02.02