오브젝트 클래스의 메소드중
protected Object clone()이라는 메소드가있는데
java.lang인 object가 다른패키지이지만 protected이고
모든클래스가 object를 상속하고있으니, 당연히 clone()도 사용이 가능한게아닌가?
쉽게말하자면 다른패키지인 object를 상속하고있음에도 왜 직접 clone()메소드 사용이 안되는거임?
클론을 사용하려는 클래스로 cloneable을 구현하긴함
package org.opentutorials.javatutorials.progenitor;
class Student implements Cloneable{
String name;
Student(String name){
this.name = name;
}
protected Object clone() throws CloneNotSupportedException{ ->오버라이딩을 왜함? protected면 상속된 student객체로 사용가능아닌가?
return super.clone(); ->이렇게하는이유가머냐?
}
}
clone이 네이티브라 정확하게 어떻게 돌아가는지는 모르겠다만 clone() 호출하는 객체 부모 체크해서 Cloneable 없으면 예외 던지고 하는게 아닐까 Cloneable 상속 안받고 하고싶으면 새로 만들어서 내용물 전부 복사하고 던져줘도 될거임.
protected (상속했을 경우 접근가능) 보호된,부모로 부터 보호(상속), 다른패키지의 서브클래스를 상속했을시에는 사용가능 다른패키지의 서브클래스(object)를 Student가 상속하고있음. 1.오브젝트의 메소드 protected Object clone() 을 사용위해서, Student implements cloneable을 해줌 2.Student s1 = new Student("egoing");객체를 만들어서 s1.clone()으로 사용안되고 위에처럼한 이유가 머임? 익셉션 처리한다고쳐도 s1.clone이 사용안되는게 이상함 왜냐면 protected니까 다른패키지인데 상속되있으니까 사용가능할거아님?
Student 에서 오버라이딩 했으면 public으로 열어줘야함
내가말하는것은 protected인데 왜 직접사용이안되는게 궁금한거임 super.clone이아니라.
native 로 되어있으니깐 코드를 까봐야 왜 그런지를 알수있겠지
https://github.com/openjdk/jdk11u-dev/blob/c1411113b396f468963a1deacc3b57ed366e735a/src/hotspot/share/oops/klass.cpp#L64
Cloneable
을 implements 하고있는지 체크하는 코드가 있는거처럼 보이는데 저거때문인갑지.
직접 clone() 메서드 사용이 안된다는게 무슨말임? 접근이 불가능하다는말? 아님 메서드 호출하고 결과 받아오는게 안된다는말?