Tôi đang viết mã để tạo một đối tượng, sao chép đối tượng, sau đó so sánh hai đối tượng.clone() đã được bảo vệ quyền truy cập tạo ra đối tượng công cộng bản sao()
Đối tượng trong câu hỏi, Octagon, là một phần mở rộng của một đối tượng GeometricObject
public class Octagon extends GeometricObject implements Comparable<Octagon>, Cloneable {
private double side;
public Octagon (double side){
this.side = side;
}
public Object clone() throws CloneNotSupportedException {
Octagon octClone = (Octagon)super.clone();
return octClone;
}
Trong một file có tên Octagon.java
Trong một, TestOctagon.java, là phương pháp chính của tôi:
public class TestOctagon {
public static void main(String[] args) {
GeometricObject test = new Octagon(5); //create an Octagon with a side of 5
System.out.println("Area is: "+test.getArea());
System.out.println("Perimeter is: "+test.getPerimeter());
Octagon copy = (Octagon)test.clone();
}
}
Lỗi xảy ra ở dòng cuối cùng của phương pháp chính.
clone() has protected access in Object
Tôi đã thử đổi tên phương pháp nhân bản trong Octagaon, nói với cloneme, nhưng sau đó tôi nhận được lỗi:
cannot find symbol
symbol: method cloneme()
location: variable test of type GeometricObject
tôi nhận được cảm giác vấn đề là vì Octagon mở rộng đối tượng khác, có lẽ ?
Tôi thực sự không thể tìm thấy giải pháp nào và tôi đã dành một giờ tốt để đọc tất cả các bản sao khác() bài đăng ở đây.
Chỉnh sửa: Tôi bắt buộc phải sử dụng bản sao. Tôi biết sự đồng thuận chung là bản sao được borked.
Bạn không có thể ghi đè một phương pháp bảo vệ được công khai. Trong lớp 'Octagon' của bạn định nghĩa nó như là' protected Object clone() ' –