컴퓨터는 잘못이 없다..

[JAVA]외부 클래스와 내부 클래스(정적 클래스, 익명 클래스, 지역 클래스) 본문

공부/JAVA

[JAVA]외부 클래스와 내부 클래스(정적 클래스, 익명 클래스, 지역 클래스)

도토리까꿍v 2024. 4. 20. 18:29
Contents 접기

#핵심 요약

  1. 내부클래스
    • 클래스 안에 선언한 클래스
  2. 내부 클래스 특징
    • 내부 클래스에서 -> 외부 클래스 멤버에 접근 가능 (그 반대는 접근 불가)
  3. 내부 클래스 종류
    • 인스턴스 클래스 (instance class) - 외부 클래스를 인스턴스화(객체생성) 해야 사용가능하다.
    • 정적 클래스 (static class) - 메모리에 상주해있기 때문에 외부 클래스가 인스턴스화(객체생성) 하지 않아도 사용가능하다.
    • 지역 클래스 (local class) - 메소드 안에 있는 클래스 
    • 익명 클래스 (anonymous class) - 추상클래스 객체 생성 시 사용한다. (추상클래스는 원래 객체 생성 불가)
  4. 익명클래스?
    • 이름을 가지지 않는 클래스
    • 선언과 동시에 객체 생성
    • 일회용 클래스

 

#소스코드

외부클래스와 내부클래스 예제

// Java 프로그래밍 - 내부 클래스

class Outer {

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

    class Inner { //내부클래스
        void innerPrint() {
            Outer.this.print(); //내부클래스에서는 외부클래스에 접근가능함
        }
    }

    //static -> 인스턴스화 하지 않아도 메모리에 생성된다.
    static class InnerStaticClass { //정적클래스
        void innerPrint() {
//            Outer.this.print(); //정적클래스 자체는 메모리에 생성되지만 outer 클래스는 객체 생성이 안된 상태기 때문에 사용 불가하다.
        }
    }

    public void outerMethod() {
        class InnerLocal {

        }

        InnerLocal il1 = new InnerLocal();
    }
}

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

class Student extends Person {
    public void printInfo() {
        System.out.println("Student.printInfo");
    }
}

public class Main {

    public static void main(String[] args) {

//      외부 클래스
        Outer o1 = new Outer();

//      내부 클래스 - 인스턴스
        //인스턴스 클래스의 경우 외부클래스를 생성하고(new), 내부 클래스를 생성(new)해서 사용해주어야한다.
        Outer.Inner i1 = new Outer().new Inner();

//      내부 클래스 - 정적 (정적클래스이기 때문에 Outer는 생성(new) 해주지 않아도 되며 클래스명. 으로 접근가능하다.)
        Outer.InnerStaticClass is1 = new Outer.InnerStaticClass();
        
//      익명 클래스 (
        Person p1 = new Person() {
            @Override
            public void printInfo() { //익명클래스 (추상메소드를 오버라이딩 할 때 사용)
                System.out.println("Main.printInfo");
            }
        };

    }

}

 

'공부 > JAVA' 카테고리의 다른 글

[JAVA]콘솔 입출력, 파일 입출력 (+printf 예제)  (0) 2024.04.20
[JAVA]인터페이스  (0) 2024.04.20
[JAVA]추상 클래스  (0) 2024.04.13
Comments