자바(java) 질문 : clone 메소드 오버라이딩을 왜 해야하는지 누가 좀 자...

자바(java) 질문 : clone 메소드 오버라이딩을 왜 해야하는지 누가 좀 자...

작성일 2017.06.17댓글 1건
    게시물 수정 , 삭제는 로그인 필요

clone 메소드를 오버라이딩 해야하는 이유에 대해서 공부중인데요.


소스파일 : InstanceCloning.java

class Point implements Cloneable
{
      private int xPos;
      private int yPos;
 
      public Point(int x, int y)
      {

           xPos=x;

           yPos=y;

      }
      public void showPosition()
      {
            System.out.printf("[%d, %d]", xPos, yPos);
            System.out.println("");
      }


//   public Object clone() throws CloneNotSupportedException     //16행
//   {
//        return super.clone();
// } //19행
}


class InstanceCloning

      public static void main(String[] args)
      {
            Point org=new Point(3, 5);
            Point cpy;
  
            try
            {
cpy=(Point)org.clone(); //31행
                  org.showPosition();
                  cpy.showPosition();
            }
            catch(CloneNotSupportedException e)
            {
                  e.printStackTrace();
            }
      }
}


16행~19행을 주석 처리하고 컴파일하면 다음과 같은 에러 메세지가 나타납니다.(주석처리하지 않으면 에러 없음)


InstanceCloning.java:31: error: clone() has protected access in Object

cpy=(Point)org.clone();

                    ^

1 error


Point 클래스와 InstanceCloninig 클래스는 모두다 clone메소드가 정의된 Object 클래스를 간접상속하니까 오버라이딩 하지않아도 clone 메소드를 호출할 수 있는거 아닌가요? 왜 컴파일 에러가 나타나는지 이해가 안갑니다.


왜냐하면 아래 소스파일도 위와 비슷한 상황인데 컴파일 에러가 나타나지 않거던요.

소스파일 : Test.java

class Object

{
      protected void showInfo()
      {
           System.out.println("Object");
      }
}


class BBB extends Object


//   protected void showInfo()
//   {
//        System.out.println("BBB");  
//        super.showInfo();
//   }


class Test extends Object

{
      public static void main(String[] args)

     {
           BBB instBBB=new BBB();
           instBBB.showInfo();  
     }
}


제가 뭘 잘못알고 있는거 같은데 자세히 설명 좀 해주시면 정말 감사하겠습니다. 



profile_image 익명 작성일 -

 오버 라이딩과 오버 로딩에 대한 차이를 잘못 이해하신 듯 합니다 .



오버 라이딩은

클래스를 상속 받아서 부모의 메소드를 자유롭게 사용 가능하게 됩니다 .

부모는 부모의 것만 사용가능하지만

자식은 부모의 것을 물려받아 함께 사용가능합니다 .

부모 : 부모는 부모

자식 : 부모도 내꺼 / 내꺼는 내꺼

이렇게 이해하시면됩니다.

그리고 오버로딩 : 매개변수 추가하고 변경하여 사용하는 것

오버 라이딩  : 매개변수 리턴타입이 동일한 상태로 사용하게됩니다 .

구현 (implements) : 무조건 해당 메소드들을 구현해서 사용하게되는 것입니다.

ex)

class Parent {
String str = "안녕하세요";
public String one() {
return str;
}

}

class baby extends Parent {
@Override
public String one() {
String str = "나는 자식입니다."
return str;
}
public static void main(String... args) {

System.out.println(one());
}
}
//결과 : 나는 자식입니다.

컴퓨터 관련(IT) 용어 20개 알려주세요

... 되도록 빨리 올려주세요 추가질문,, 그리고 컴퓨터... Applet 썬마이크로시스템 사가 웹 커뮤니티에 자바를... 연결하는지 설계하는 기술은 고도의 기술이며...

java 다형성 질문하나드릴게요

... 여기서 질문할게요. B.toSrting() 라는 함수를 호출하면 출력되는 결과물이 B클래스의 toString메소드가... 클래스의 메서드를 재정의하면 무조건 오버라이딩이...