2014-12-11 5 views
0

는 의심의 여지가개체 복제 오류

public class A implements Cloneable{ 

    public static void main(String[] args) { 

     A a1 = new A(); 
     try { 
      A a2 = (A) a1.clone();//works fine 
     } catch (CloneNotSupportedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     B b1 = new B(); 
     B b2 = (B) b1.clone();//cannot get this method 

    } 

} 

class B implements Cloneable { 

} 

이 코드는 내가 두 클래스를 모두 알고있는 오류를

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
The method clone() from the type Object is not visible 

을 다음있어 컴파일 된 날 때 2 개 클래스 클래스 A와 B를 갖는 설명하게 저를 명확히하십시오이 확장 Java.lang.Object 클래스 이유를 설명하십시오 class Bclone() 방법을 얻을 수 없습니다

+0

IIRC 복제를 허용하려면 몇 가지 특수 인터페이스를 구현해야합니다. "Cloneable"또는 확실하지 않은 것 – MightyPork

+0

여기에 내부 클래스가 없습니다. – EJP

답변

5

clone() 메서드는 보호되어 있습니다. 귀하의 메인은 클래스 A의 일부이므로 A 유형의 객체에 대해 보호 된 메소드를 호출 할 수 있으므로 a.clone()은 정상적으로 작동합니다. clone가 보호로하고 B 클래스의 따라서 사용할 수없는 외부가, 그것은 공개적으로 B 오버라이드 (override) 할하지 않는 한

b.clone()이 실패합니다.

Here은 약 clone 방법에 대한 Javadoc입니다.