티스토리 뷰

이것이 자바다 1권 9장 확인문제 풀이

 

1. 중첩 멤버 클래스에 대한 설명으로 틀린 것은 무엇입니까?

정답 - 4번 (정적 멤버 클래스 내부에는 바깥 클래스의 인스턴스 필드를 사용할 수 있다.)
해설 - 정적 멤버 클래스는 바깥 클래스의 객체가 없어도 사용할 수 있다.
           따라서 정적 멤버 클래스 내부에 바깥 클래스의 인스턴스 필드를 사용할 수 없다. 

 

2. 로컬 클래스에 대한 설명으로 틀린 것은 무엇입니까?

정답 - 3번 (로컬 클래스는 static 키워드를 이용해서 정적 클래스로 만들 수 있다.)
해설 - 로컬 클래스는 static 키워드를 사용할 수 없다.

 

3. 익명 객체에 대한 설명으로 틀린 것은 무엇입니까?

정답 - 3번(익명 객체는 생정자를 선언할 수 있다.)
해설 - 익명 객체는 생성자를 따로 추가할 수 없다.

 

4. 다음과 같이 Car 클래스 내부에 Tire와 Engine이 멤버 클래스로 선언되어 있습니다. 외부 클래스(NestedClassExample)에서 멤버 클래스의 객체를 생성하는 코드를 작성해 보세요.

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

 

 

5. AnonymousExample 클래스의 실행 결과를 보고 Vehicle 인터페이스의 익명 구현 클래스 객체를 이용해서 필드, 로컬 변수의 초기값과 메소드의 매개값을 대입해 보세요.

public interface Vehicle{
	public void run();
}
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("트럭이 달립니다.");
            }
        });
    }
}

 

 

6. 다음 Chatting 클래스는 컴파일 에러가 발생합니다. 원인이 무엇입니까?

package 이것이자바다;

public class Chatting {
	void startChat(String chatId) {
		String nickName = null;
		nickName = chatId;  //(X) 
		//변경 --> String nickName = chatId;
		
		Chat chat = new Chat() {
			
			@Override
			public void start() {
				while(true) {
					String inputDate = "안녕하세요";
					String message = "[" + nickName + "]" + inputDate;
					//nickName은 final로 선언된 상수라 chatId로 초기화가 불가능하다.
					//null도 하나의 값으로 인식하기 때문.
					sendMessage(message);
				}
			}
		};
		chat.start();
	}
	
	class Chat{
		void start() {}
		void sendMessage(String message) {}
	}

}


🔎 String nickName = null; 로 상수 선언을 해주었기 때문에 nickName 변수의 값을 변경할 수 없다. (null도 값이라고 인식하기 때문) 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31