아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
늘씬한호박벌228
늘씬한호박벌22820.10.31

자바 이문제는 어떻게 푸나요??

  1. 다음 프로그램을 실행하면 casting()메서드가 예외를 발생시킨다. 예외의 원인을 조사하시오. 그리고 casting() 메서드에서 발생한 예외를 메인 메서드가 처리하도록 프로그램을 수정하시오.

    1. 문제 코드

class Shape { }

class Rectangle extends Shape { }

class Circle extends Shape { }

public class CastExceptionTest {

public static void main(String[] args){

Rectangle r = new Rectangle();

casting(r);

}

static void casting(Shape s) {

Circle c = (Circle)s;

}

}

55글자 더 채워주세요.
답변의 개수3개의 답변이 있어요!
  • 1. 예외의 원인

    캐스팅을 할 수 없는 데이터타입이기 때문입니다.

    Rectangle 타입을 Circle이 동일한 타입이 아니기 때문에 불가능합니다.

    2. casting() 메서드 수정
    해결 방법은 두가지입니다.
    첫번째 상속 관계에 있기 때문에 상속 클래스로 casting 하면 됩니다.
    이렇게 할 경우 Shape에 정의된 public 필드와 메소드만을 활용 할 수 있습니다.

    static void casting(Shape s) { Shape c = s; }


    두번째는 원하는 데이터 타입을 찾아서 casting 해주는 것입니다.

    instanceof 를 이용하여 해당 데이터 타입이 어떤것인지 찾고 해당 데이터 타입으로 casting 을 해준다면 해당 데이터타입을 그대로 활용 할 수 있습니다.

    static void casting(Shape s) { if(s instanceof Rectangle){ Rectangle r = (Rectangle) s; } else if(s instanceof Circle){ Circle r = (Circle) s; } }


  • try catch finally를 통해 예외 원인을 찾고 그 원인을 프린트하는 문제인듯보입니다.

    먼저 try catch finally 문을 연습해보세요.

    "점프 투 자바"라고 무료 ebook입니다.

    https://wikidocs.net/book/31

    인터넷에서 자유롭게 찾아서 보실 수 있으니 try catch finally 문 chapter (https://wikidocs.net/229)를 찾아서 보시면 문제 해결에 많은 도움이 되실꺼에요.


  • import java.lang.*; class Shape { } class Rectangle extends Shape { } class Circle extends Shape { } public class CastExceptionTest { public static void main(String[] args){ Rectangle r = new Rectangle(); try { casting(r); } catch(ClassCastException e) { // 오류 메세지 추가 e.printStackTrace(); } } static void casting(Shape s) { Circle c = (Circle)s; } }

    주석 부분에 원하는 메세지를 넣으면 될것 같습니다.