Notice
Recent Posts
Recent Comments
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

이것이 자바다 9장 확인 문제 본문

이것이 자바다/09 중첩 선언과 익명 객체

이것이 자바다 9장 확인 문제

빌드이너프 2024. 2. 5. 07:11

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; 넣어야 한다.