import java.util.NoSuchElementException; public class GFancyQueue<E> implements GQueue<E>, GFancyCollection<E>, Cloneable { //Data private GQueue<E> elements; //Constructors public GFancyQueue(GQueue<E> arg) { elements = arg; } //GQueue methods implementation public boolean isEmpty() { return elements.isEmpty(); } public boolean add(E e) throws IllegalStateException { ... } public E element() throws NoSuchElementException { ... } public E remove() throws NoSuchElementException { ... } public boolean offer(E e) { ... } public E peek() { ... } public E poll() { ... } //GFancyCollection methods implementation public int size(){ return this.toArray().length; } public void clear() { ... } public boolean contains(E arg) { Object[] temp = elements.toArray(); //Proverka dali arg prinadleji na masiva temp ... } public Object[] toArray() { return elements.toArray(); } @SuppressWarnings("unchecked") public Object clone() { GFancyQueue<E> copy = null; try { copy = (GFancyQueue<E>)super.clone(); copy.elements = (GQueue<E>)elements.clone(); } catch (java.lang.CloneNotSupportedException e) {} return copy; } //Override methods - inherited from class Object @SuppressWarnings("unchecked") public boolean equals(Object arg) { GFancyQueue<E> d = (GFancyQueue<E>)arg; if(this.size() != d.size()) return false; Object[] thisArray = elements.toArray(); Object[] argArray = d.toArray(); //Proverka dali masivite thisArray i argArray savpadat ... } public String toString() { Object[] temp = elements.toArray(); //Polu4avane na niz ot elementite na masiva temp ... } }