Java

[Java] 내부 클래스

블로그 주인장 2023. 8. 9.

목차


    📢 내부 클래스

    • 클래스 안에 클래스가 있는 형태
    • 중첩 클래스라고 하기도 한다.

    🎪 내부 클래스 특징

    1. 내부 클래스에서 외부 클래스 멤버 접근 가능
    2. 외부에서는 내부 클래스를 접근할 수 없다.

    📢 내부 클래스 종류

    🎪 인스턴스 클래스(Instance)

    • 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지지 않는 클래스
    • 인스턴스 클래스는 주로 외부 클래스(outer class)의 인스턴스 변수나 인스턴스 메소드에 사용
    class Outer{
        public void Print(){
            System.out.println("Outer.print");
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
    
    //      외부 클래스
            Outer o1 = new Outer();
        }
    
    }

    🎪 정적 클래스(static)

    • 외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지는 클래스
    • 정적 클래스는 주로 외부 클래스(outer class)의 클래스 메소드에 사용될 목적으로 선언
    class Outer{
        public void Print(){
            System.out.println("Outer.print");
        }
    
        //static 클래스
        static class InnerStatic{
            public void innerPrint(){
            }
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
    
    //      내부 클래스 - 정적
            Outer.InnerStatic is1 = new Outer.InnerStatic();
        }
    
    }

    🎪 지역 클래스(local)

    • 외부 클래스의 메소드나 초기화 블록에 선언된 클래스를 의미
    • 지역 클래스는 선언된 블록 내에서만 사용
    class Outer{
        public void Print(){
            System.out.println("Outer.print");
        }
        
        //이너 클래스
        class Inner{
            public void innerPrint(){
                Outer.this.Print();
            }
        }
    }
    
    public class Main {
    
        public static void main(String[] args) {
    
    //      내부 클래스 - 인스턴스
            Outer.Inner i1 = new Outer().new Inner();
        }
    
    }

    🎪 익명 클래스(anonymous)

    • 다른 내부 클래스와는 달리 이름을 가지지 않는 클래스를 의미
    • 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성하는 일회용 클래스이다.
    •  생성자를 선언할 수도 없으며, 오로지 단 하나의 클래스나 단 하나의 인터페이스를 상속받거나 구현한다.
    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) {
    
    //      익명 클래스
            Person p1 = new Person() {
                @Override
                public void PrintInfo() {
                    System.out.println("Person.PrintInfo");
                }
            };
    
        }
    
    }
    반응형

    'Java' 카테고리의 다른 글

    [Java] 람다식과 스트림  (0) 2023.08.10
    [Java] 인터페이스  (0) 2023.08.09
    [Java] 추상클래스  (0) 2023.08.09

    댓글