JAVA

이것이 자바다 9장 확인 문제 풀이 (중첩 클래스와 중첩 인터페이스)

Adev 2022. 9. 5. 19:30

1. 중첩 멤버 클래스 - 중첩 클래스 중 클래스의 멤버로서 선언되는 것을 멤버 클래스라고 하고, 메소드 내부에서 선언되는 것을 로컬 클래스라고 한다.
답 : 4

정적 멤버 클래스 내부에는 바깥 클래스의 인스턴스 필드를 사용할 수 없다.

//정적 멤버 클래스 안에서는 바깥 클래스의 정적 필드와 메소드에만 접근할 수 있고 인스턴트 필드와 메소드는 접근할 수 없다.

 


2. 로컬 클래스 - 메소드 내에 선언되는 중첩 클래스이다.
답 : 3

로컬 클래스는 static 키워드를 이용해서 정적 클래스로 만들 수 없다.

//로컬 클래스는 접근 제한자 및 static을 붙일 수 없다. 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없기 때문이다.

 


3. 익명 객체 - 이름이 없는 객체이다.
답 : 3

익명 객체에는 생성자를 선언할 수 없다.

//단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.

 


4.

package verify.exam04;

public class NestedClassExample2 {
	public static void main(String[] args) {
		Car myCar = new Car();
		
		Car.Tire tire = myCar.new Tire();
		
		Car.Engine engine = new Car.Engine();
	}
}

 

 

5. 

package verify.exam05;

import sec03.exam01_system_in_out.SystemOutExample;

public class Anonymous2 { 
	Vehicle field = new Vehicle() {
	@Override
	public void run() {
		System.out.println("자전거가 달립니다.");
	}
	};

	void method1() { 
		Vehicle localVar = new Vehicle() {
			@Override
			public void run() {
				System.out.println("승용차가 달립니다.");
			}
		};
		localVar.run();
	}
	
	void method2(Vehicle v) { 
		v.run();
	}
}
package verify.exam05;

public class AnonymousExample2 {
	public static void main(String[] args) {
		Anonymous anony = new Anonymous();
		anony.field.run(); //익명 객체 필드 사용
		anony.method1(); //익명 객체 로컬변수 사용
		anony.method2( //익명 객체 매개값 사용
			new Vehicle () {
				@Override
				public void run() {
					System.out.println("트럭이 달립니다.");
				}
			}
		);
	}
}

 

 

6. 

package verify.exam06;

public class Chatting2 {
	void startChat(String chatId) {
		String nickName = chatId;
		Chat chat = new Chat() {
			@Override
			public void start() {
				while(true) {
					String inputData = "안녕하세요";
					String message = "[" + nickName + "] " + inputData;
					sendMessage(message);
				}
			}
		};
		chat.start();
	}
	
	class Chat {
		void start() {}
		void sendMessage(String message) {}
	}
}

답 : 변수를 null로 선언한 이후 다시 변경할 수 없다.

String nickName = null; nickName = chatId; -(x)

String nicName = chatID; -(o)

//익명 객체 내부에서는 매개 변수나 로컬 변수를 final로 선언해 수정을 막는다.