Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [JAVA] clone()

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    143

    [JAVA] clone()

    Salve a tutti. Ho un problema con la riscrittura del metodo clone() della classe Object.
    Se io creo una classe Prova e una classe Prova2 che estende Prova, non so come implementare clone() visto che i campi di Prova non li vedo nella classe Prova2:
    codice:
    public class Prova implements Cloneable
    {
    	private int valore;
    	private String nome;
    	
    	public Prova()
    	{
    		valore = 4;
    		nome = "abc";
    	}
    	public Prova(int v, String n)
    	{
    		valore = v;
    		nome = n;
    	}
    	public Object clone()
    	{
    		return new Prova(valore , nome);
    	}
    }
    Fino a qui credo di avere fatto bene
    codice:
    public class Prova2 extends Prova implements Cloneable
    {
    	private String nome2;
    	
    	public Prova2()
    	{
    		super();
    		nome2 = "xyz";
    	}
    	
    	public Prova2(int v, String n, String n2)
    	{
    		super(v,n);
    		nome2 = n2;
    	}
    	public Object clone()
    	{
    		return new Prova2(? , ? , nome2);
    	}
    }
    Ecco, nel metodo clone di Prova2 posso solo accedere a nome2, ma le variabili valore e nome non le posso mettere.
    Come posso fare a risolvere il problema?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,323
    Semplice: implementa nella classe Prova dei metodi per poter recuperare tali valori!
    codice:
    public class Prova implements Cloneable {
       ...
       public int getValore() { return valore; }
       public String getNome() { return nome; }
    }
    Quindi operi in questo modo:
    codice:
    public class Prova2 extends Prova {
       ...
       public Object clone() { return new Prova2(getValore(), getNome(), nome2); }
    }
    Puoi anche dichiarare questi metodi come protected, in modo che solamente le classi che la estendono possano usarli, oppure dichiarare come protected direttamente i membri della classe.


    PS: non serve far implementare Cloneable anche alla sottoclasse... la implementa già per ereditarietà!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.