☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]JAVA_ECLIPSE21 중첩 클래스와 중첩 인터페이스

조반짝 2023. 8. 28. 18:17
728x90
반응형

중첩클래스 Nested class

클래스 안에 클래스를 생성

외부 클래스인 바깥 클래스(outter class)와 , 내부 클래스(inner class)로 형성

● 멤버 클래스 : 재사용 가능

● 로컬클래스 : 메서드를 사용하면 없어짐, 메서드가 실행될때만 사용할 수있음

같은 인스턴스 멤버만 사용가능

 

 


중첩클래스

 


구현 클래스


중첩클래스의 접근 제한

 


 

package chapter09.sec01.exam02;

public class Ace {
	
	// 인스턴스 멤버 클래스
	class Base{
		
	}

	//정적 멤버 클래스
	static class Case{
		
	}
	
	// 인스턴스 필드 선언
	Base field1 = new Base();
	Case field2 = new Case();
	
	// 인스턴스 메서드 선언
	void method1() {
		Base var1 = new Base();
		Case var2 = new Case();
	}
	
	// 정적(static) 필드 초기화
//	static Base field3 = new Base();
	// Base static 접근자가 아니기 때문에 오류남
	static Case field4 = new Case();
	
	// 정적(static) 메서드 선언
	static void method2() {
//		Base var1 = new Base();
		Case var2 = new Case();
	}
}

 

 

 

 


 

 

 


멤버클래스에서 사용제한

 

 

 

package chapter09.sec01.exam04;

// 멤버 클래스에서 사용 제한 예시
public class Ace {

	int field1;
	void method1() {
		
	}
	static int field2;
	static void method2() {
	}
	
	class Base{
		void method() {
			// 아래 4줄 : 필드와 메서드에 접근 가능함
			field1 = 10;
			method1();
			
			field2 = 10;
			method2();
		}
	}
	static class Case{
		void method() {
//			field1 = 10;
//			method1();
			
			field2 = 10;
			method2();
		}
	}
}

 

 

 



로컬클래스에서 바깥 클래스 참조 얻기

 

 


중첩 인터페이스

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

 

인스턴트 멤버 인터페이스는 바깥 클래스만으로 바로 접근

정적 멤버 인터페이스는 바깥 클래스의 객체 없이 바깥 클래스만으로 바로 접근 가능

주로 정적 멤버 인터페이스 많이 사용 

 


 

내부로 인터페이스 만들기

 

button 클래스생성

CallListener 구현클래스

package chapter09.sec01.exam06;

//앞서 생성한 Button 클래스의 중첩 인터페이스인 OnClickListener를 구현(implements)하는
//CallListener 구현 클래스를 소스 코딩합니다.
public class CallListener implements Button.OnClickListener{

	@Override
	public void onClick() {
		System.out.println("전화를 겁니다!");
	}

	
}

 

MessageListener 구현클래스

package chapter09.sec01.exam06;

// 앞서 생성한 Button 클래스의 중첩 인터페이스인 OnClickListener를 구현(implements)하는
// MessageListener 구현 클래스를 소스 코딩합니다.
public class MessageListener implements Button.OnClickListener {

	@Override
	public void onClick() {
		System.out.println("메시지를 보냅니다!");
		
	}

}

ButtonExample 실행클래스

package chapter09.sec01.exam06;

// 앞서 생성한 두개의 구현클래스(CallListener, MessageListener)를 활용하는
// ButtonExample 실행 클래스를 소스코딩합니다.
public class ButtonExample {

	public static void main(String[] args) {
		
		// Button 타입(형) btn 객체 참조 변수(인스턴스)를 생성해줍니다.
		Button btn = new Button();
		
		btn.setListner(new CallListener());
		btn.touch();
	}
}

 

728x90
반응형