CH09

yeon·2022년 12월 4일
0

이것이자바다

목록 보기
7/15

1. 중첩 클래스와 중첩 인터페이스

중첩 클래스

클래스 멤버로 선언된 클래스

public classA{
	pulic classB{
    }
}

중첩 인터페이스

클래스 멤버로 선언된 인터페이스

class ClassA{
	interface InterfaceA{
    }
}

용도

해당 클래스에서만 사용하는 클래스/인터페이스가 필요할 때 활용되며 중첩 인터페이스는 UI 컴포넌트 내부 이벤트 처리에 많이 활용됨

2. 중첩 클래스

분류선언위치설명
인스턴스 멤버 클래스클래스 내부A객체 생성해야만 사용할 수 있는 중첩 클래스
정적 멤버 클래스클래스 내부A클래스로 바로 접근 가능한 중첩 클래스
로컬 클래스메소드 내부method가 실행할 때만 사용할 수 있는 중첩 클래스

인스턴스 멤버 클래스

class A{
	class B{
    	B(){...}
        int field1;
        void method1();
    |
}

A a = new A();
A.B b = a.new B();
b.field1 = 3;
b.method1();

정적 멤버 클래스

class A{
	static class B{
    	B(){...}
        int field1;
        static int field2;
        void method1(){...}
        static void method2(){...}
    }
|

A.B b = new A.B();
c.field1 = 3;
c.method1();
A.C.field2 = 3;
A.C.method2();

로컬 클래스

void method(){
	class A(){
    	A(){...}
        int field1;
        void method1(){...}
    }
    A a = new A();
    a.field1 = 3;
    a.method1();
}


void method(){
	class DownloadThread extends Thread{...}
    DownloadThread thread = new DownloadThread();
    thread.start();
}

3. 중첩 클래스의 접근 제한

바깥 필드의 메소드에서의 사용 제한

public class A{
	class B{}
   	static class C(){}
    
    B b = new B();
    C c = new C();
    
    void method1(){
    	B b1 = new B();
        C c1 = new C();
    }
    
    static B staticB = new B(); //X
    static C staticC = new C();
    
    static void method2(){
    	B b2 = new B(); ///X
        C c2 = new C();
    }
|

멤버 클래스에서의 사용 제한

class A{
	int field1;
    void method1();
    
    static int field2;
    static void method2();
    
    class B{
    	void method(){
        	field1 = 10;
            method1();
            
            field2 = 10;
            method2();
    	}
    }
    
    static class C{
    	void method(){
        	field2 = 10;
            method2();
        }
    }
}

로컬 클래스에서의 사용 제한

public void method2(int args){
	int localVariable = 1;
    class Inner{
    	public void method(){
        	int result = args + localVariable;
        }
    }
}

중첩 클래스에서 바깥 클래스 참조 얻기

public class Outter{
	String field = "Outter-field";
    void method(){
    	System.out.println("Outter-method");
    }
    
    class Nested{
    	String field = "Nested-field";
        void method(){
        	System.out.println("Nested-method");
        }
        void println(){
        	System.out.println(this.field);
            this.method();
            System.out.println(Outter.this.field);
            Outter.this.method();
       	}
    }
}

4. 중첩 인터페이스

선언

public class Button{
	OnClickListener listener;
    
    void setOnClickListener(OnClickListener listener){
    	this.listener = listener;
    }
    
    void touch(){
    	listener.onClick();
    }
    
    interface OnClickListener{
    	void onClick();
    }
}

5. 익명 객체

이름이 없는 객체로 단독 생성 불가능하고, 필드의 초기값, 로컬 변수의 초기값, 매개변수의 매개값으로 주로 대입됨

class A{
	Parent field = new Parent(){
    	int childField;
        void childMethod(){}
        @Override
        void parentMethod(){}
    };
|

익명 객체에 새롭게 정의된 필드와 메소드

익명 객체 내부에서만 사용되며 외부에서는 접근할 수 없음

profile
🐥

0개의 댓글

관련 채용 정보