Possible Duplicate:
Why is the clone() method protected in java.lang.Object?Co jest powodem Object.clone() jest chronione
Tu jest mój kod testowy do sprawdzania pracy metoda clone,
class Test{
int a;
public void setA(int value){
a = value;
}
public int getA(){
return a;
}
}
class TestClass{
public static void main(String args[]){
Test obj1 = new Test();
obj1.setA(100);
Test obj2 = obj1.clone();
System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
obj2.setA(9999);
System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
}
}
Zgłasza błąd kompilacji: clone() został zabezpieczony dostęp w java.lang.Object at obj1.clone()
- Co robię źle tutaj?
- Jaki jest powód, dla którego klon() jest chroniony?
Dzięki
Edycja wraz z odpowiedź: No w końcu widzę moją uprząż test działa, kiedy wdrożyła Cloneable interfejs i nadpisane metody klonowania. To nie działa z przesłonięciem metody clone() z klasy Object. Oto zmodyfikowany kod,
class Test implements Cloneable{
int a;
public void setA(int value){
a = value;
}
public int getA(){
return a;
}
@Override
protected Test clone() throws CloneNotSupportedException{
return(Test) super.clone();
}
}
class TestClass{
public static void main(String args[]){
Test obj1 = new Test();
obj1.setA(100);
try{
Test obj2 = (Test)obj1.clone();
System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
obj2.setA(9999);
System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
}catch(Exception e){
System.out.println("ERror"+e);
}
}
}
2. Powód clone() metoda jest chronić: Znalazłem to w książce Rdzeń Java
Metoda Clone jest chroniony metoda obiektu, co oznacza, że Twój kod nie może tego po prostu nazwać. Tylko klasa Pracownik może klonować obiekty pracownicze.
Jest powód tego ograniczenia. Pomyśl o sposobie, w jaki klasa Object może implementować klon. W ogóle nie wie o przedmiocie, więc może wykonać tylko kopię pola pola. Jeśli wszystkie pola danych w obiekcie są liczbami lub innymi podstawowymi typami, kopiowanie pól jest w porządku.
Ale jeśli obiekt zawiera odniesienia do podobiektów, wówczas skopiowanie pola daje inne odniesienie do podobiektu, więc oryginał i sklonowane obiekty nadal udostępniają pewne informacje.
Nadzieja jest to pomocne dla innych