public Object clone() throws CloneNotSupportedException {
DoublyLinkedList<E> other=(DoublyLinkedList<E>) super.clone();
if(size > 0){
other.header=new Node<>(null,null,null);
other.trailer=new Node<>(null,other.header,null);
other.header.setNext(other.trailer);
Node<E> walk=header.getNext();
Node<E> otherWalk=other.header;
while (walk != trailer){
Node<E> newest=new Node<>
(walk.getElement(),otherWalk,otherWalk.getNext());
otherWalk.setNext(newest);
walk=walk.getNext();
otherWalk=otherWalk.getNext();
}
}
return other;
}
我将克隆方法覆盖为公共方法,并在我的代码中使用了它。
public Object deepCopy() {
Node<E> walk = header;
while (walk != trailer) {
Node<E> newNode = new Node<E>((E)
(walk.getElement()).clone(), null, null);
......
但是它出现一个错误,提示“ clone()在java.lang.Object中具有受保护的访问”。
在我的课堂上,我已经将clone方法更改为public方法,为什么它仍然受到保护?
答案 0 :(得分:0)
当您尝试像以前那样调用克隆方法时:
(E)(walk.getElement()).clone()
它尝试调用clone
类中定义的Object
方法,然后尝试将克隆转换为E
类型。但这失败了,因为Object#clone
方法具有受保护的范围。
要调用覆盖的clone
方法,您必须这样编写:
(E)((E)(walk.getElement().clone()))