user9209108
user9209108

Reputation:

The method clone() from the type Object is not visible java

This is the superclass:

public class Marca implements Cloneable{

    public Marca() {

        String nome = null;
        String descrizione = null;  
    }

    public Marca(String nome,String descrizione ){

        this.nome = nome;
        this.descrizione = descrizione;     
    }

    //Object

    public Marca clone() {
        try {
            return (Marca) super.clone();
        }
        catch(CloneNotSupportedException e) {
            return null;
        }
    }

    private String nome;
    private String descrizione;
}

This is the second class (the subclass) with the problem:

public class Capo_di_abbigliamento extends Marca{

    public Capo_di_abbigliamento() {

        Marca abbigliamento = new Marca();
        String codice = null;
        String colore = null;
        double prezzo = 0;
    }

    public Capo_di_abbigliamento(String codice,String colore, double prezzo , String nome , String descrizione) 
    {
    super(nome,descrizione);
    this.codice= codice;
    this.colore= colore;
    this.prezzo= prezzo;
    }


    public Capo_di_abbigliamento clone() {
        try {
            Capo_di_abbigliamento cloned = (Capo_di_abbigliamento) super.clone();
             cloned.abbigliamento= abbigliamento.clone(); // **THE PROBLEM IS HERE**
             return cloned;
        }
        catch(CloneNotSupportedException e) {
            return null;
        }
    }

    private Object abbigliamento;
    private String codice;
    private String colore;
    private double prezzo;
}

This error appear on the public Capo_di_abbigliamento clone()

"The method clone() from the type Object is not visible".

The problem is the method clone in the capo_di_abbigliamento class. How can i do clone with this class?

Upvotes: 1

Views: 1721

Answers (1)

Peter Lawrey
Peter Lawrey

Reputation: 533780

You have a field

private Object abbigliamento;

and it's clone() method is protected and not visible.

The variable with the same name in your constructor doesn't do anything.

I assume you are not trying to create local variables but initialise the fields.

private Marca abbigliamento;
private String codice;
private String colore;
private double prezzo;

public Capo_di_abbigliamento() {
    abbigliamento = new Marca();
    codice = null;
    colore = null;
    prezzo = 0;
}

or

private Marca abbigliamento = new Marca();
private String codice;
private String colore;
private double prezzo;

public Capo_di_abbigliamento() {
}

Upvotes: 1

Related Questions