0

Objectクラスには、として宣言されているclone()メソッドがあることを知っています。つまり、すべてのクラスがObjectクラスを継承しているため、自分のクラスを呼び出すことができます。たとえば、次のようになります。 protectedclone()

public class CloneTest
{
    public static void main(String args[])
    {
        Employee employee1 = new Employee(...);
        Employee employee2 = employee1.clone(); // but here has 2 errors
    }
}

class Employee
{
    ...
}

最初のエラーは「オブジェクトで保護されたアクセス」に関するものです
。2番目のエラーは「互換性のないタイプ」
です。なぜこれらのエラーが発生するのですか?

4

4 に答える 4

3

clone メソッドは、オーバーライドされていない場合は Object を返します。したがって、結果をキャストする必要があります:

Employee employee2 = (Employee) employee1.clone();

最初のエラーは、表示されない Employee クラスの内容に関連しています。clone メソッドをオーバーライドしますか? それは、呼び出されたクラスの他のクラスからアクセスできるようにするための条件です。

于 2012-09-11T14:07:52.520 に答える
1

クラスEmployeeが機能するには、次のようになりますclone()

public class Employee implements Cloneable {
    ...

    public Employee clone() {
        try {
            return (Employee) super.clone();
        }
        catch(CloneNotSupportedException e) {
            throe new IllegalStateException("I forgot to implement cloneable");
        }
    }

    ...
}

最初のエラーはclone、クラスでアクセスが保護されているObjectためであり、2 番目のエラーは、デフォルトで返さObjectれるためです。

于 2012-09-11T14:19:48.900 に答える
0

最初のエラーは.clone、オブジェクト クラスで保護されているためです。非公開です』

オブジェクトのメソッドにアクセスする唯一の.clone()方法は、パブリック メソッドを持つコンパイル時の型があることを知ること.clone()です。

クラスcloneのメソッドをオーバーライドするEmployee

 class Employee implements Cloneable
{
   @Override
   protected Employee clone() throws CloneNotSupportedException {
    // TODO Auto-generated method stub
    return (Employee)super.clone();
}
}
}
于 2012-09-11T14:12:26.547 に答える
0

clone メソッドを使用するには、いくつかのことを行う必要があります。参照: http://www.javapractices.com/topic/TopicAction.do?Id=71

于 2012-09-11T14:14:34.457 に答える