java类型中的方法clone()不可见

时间:2018-06-25 15:00:42

标签: java

这是超类:

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;
}

这是有问题的第二个类(子类):

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;
}

此错误出现在公开Capo_di_abbigliamento clone()

  

“不可见来自对象类型的方法clone()”。

问题是capo_di_abbigliamento类中的方法克隆。我该如何克隆该课程?

1 个答案:

答案 0 :(得分:1)

您有一个字段

private Object abbigliamento;

它的clone()方法受到保护,不可见。

在构造函数中具有相同名称的变量不会执行任何操作。

我假设您不是要创建局部变量,而是要初始化字段。

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;
}

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

public Capo_di_abbigliamento() {
}