переопределяющий метод клонирования, но он все еще защищен - PullRequest
0 голосов
/ 08 мая 2019
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".

Я уже изменил метод клонирования как открытый в своем классе, почему он все еще защищен?

1 Ответ

0 голосов
/ 09 мая 2019

Когда вы пытаетесь вызвать метод клонирования, как вы это сделали:

(E)(walk.getElement()).clone()

он пытается вызвать метод clone, определенный в классе Object, а затем пытается привести клон к типу E. Но он терпит неудачу, так как метод Object#clone имеет защищенную область.

Чтобы вызвать переопределенный метод clone, вы должны написать его так:

(E)((E)(walk.getElement().clone()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...