충분히 쌓여가는
이것이 자바다 9장 확인 문제 본문
1. 중첩 멤버 클래스에 대한 설명으로 틀린 것은 무엇입니까?
➊ 인스턴스 멤버 클래스는 바깥 클래스의 객체가 있어야 사용될 수 있다.
➋ 정적 멤버 클래스는 바깥 클래스의 객체가 없어도 사용될 수 있다.
➌ 인스턴스 멤버 클래스 내부에는 바깥클래스의 모든 필드와 메소드를 사용할 수 있다.
➍ 정적 멤버클래스 내부에는 바깥클래스의 인스턴스 필드를 사용할 수 있다.
답: 4
2. 로컬 클래스에 대한 설명으로 틀린 것은 무엇입니까?
➊ 로컬 클래스는 메소드 내부에 선언된 클래스를 말한다.
➋ 로컬 클래스는 바깥클래스의 필드와 메소드를 사용할수있다.
➌ 로컬 클래스는 static 키워드를 이용해서 정적 클래스로 만들 수 있다.
➍ final 특성을 가진 매개변수나 로컬 변수만 로컬 클래스 내부에서 사용할 수 있다.
답: 3
3. 익명 객체에 대한 설명으로 틀린 것은 무엇입니까?
➊ 익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성될 수 있다.
➋ 익명 객체는 필드, 매개변수, 로컬 변수의 초기값으로 주로 사용된다.
➌ 익명 객체에는 생성자를 선언할 수 있다.
➍ 익명 객체는 주로 재정의된 메소드를 멤버로 가진다.
답: 3
4. 다음과 같이 Car 클래스 내부에 Tire와 Engine 클래스가 멤버로 선언되어 있습니다. CarExample 클래스에서 Tire와 Engine 객체를 생성하는 코드를 작성해보세요.
publi clss Car {
class Tire {}
static class Engine {]
}
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
Car.Tire tire = _______________________;
Car.Engine engine = _______________________;
}
}
답 :
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
Car.Tire tire = myCar.new Tire();
Car.Engine engine = Car.new Engine();
}
}
5. Action 인터페이스는 다음과 같이 work() 추상 메소드를 가지고 있습니다. ActionExample 클래스의 main() 메소드에서 Action의 익명 구현 객체를 만들어 실행 결과와 동일하게 나오도록 박스 안에 들어갈 코드를 작성해보세요.
public interface Action {
public void work();
}
public class ActionExample {
public static void main(String[] args) {
Action action = ____________________________
____________________________
____________________________
____________________________
action.work();
}
}
실행결과
복사를 합니다.
답:
Action action = new Action() {
@Override
public void work() {
System.out.println("복사를 합니다.");
}
};
6. AnonymousExample 클래스의 실행 결과를 보고, Vehicle 인터페이스의 익명 구현 객체를 필드와 로컬 변수의 초기값 그리고 메소드의 매개값으로 대입해보세요.
public interface Vehicle {
public void run();
}
public class Anonymous {
Vehicle field = ____________________________
____________________________
____________________________
void method1() {
Vehicle localVar = ____________________________
____________________________
____________________________
localVar.run();
void method2(Vehicle v) {
v.run();
}
}
}
public class AnonymousExample {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
anony.field.run();
anony.method1();
anony.method2()(
_________________________________
_________________________________
_________________________________
);
}
}
실행결과
자전거가 달립니다.
승용차가 달립니다.
트럭이 달립니다.
답:
public class Anonymous {
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();
}
}
public class AnonymousExample {
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("트럭이 달립니다.");
}
}
);
}
}
7.다음 Chatting 클래스는 컴파일 에러가 발생합니다. 원인을 설명해보세요.
public class Chatting {
class Chat {
void start() {}
void sendMessage(String message) {}
}
void startChat(String chatId) {
String nickName = null;
nickName = chatId;
Chat chat = new Chat() {
@Override
public void start() {
while(true) {
String inputData = "안녕하세요";
String message = "[" + nickName + "] " + inputData;
sendMessage(message);
}
}
};
chat.start();
}
}
답:
nickName은 final 특성을 갖기 때문에 startChat ( ) 메소드에서 nickName = chatId와 같이 값을 변경할 수 없다.
따라서 String nickName = null;과 nickName = chatId;를 제거하고 대 신 String nickName = chatId;를 넣어야 한다.
'이것이 자바다 > 09 중첩 선언과 익명 객체' 카테고리의 다른 글
9.5 바깥 멤버 접근 - this (0) | 2024.04.04 |
---|---|
9.5 바깥 멤버 접근 (0) | 2024.04.04 |
9.4 로컬 클래스 - 로컬 변수의 final (0) | 2024.04.04 |
9.2 인스턴스 멤버 클래스 (0) | 2024.04.04 |
9.1 중첩 클래스 (0) | 2024.04.04 |