5
class Main {

    public static void main(String[] args) {
        new Cloned().clone();
    }
}

class Cloned implements Cloneable {
}

これにより、保護されているというエラーが表示されます。object のサブクラスは、そのメソッドを呼び出すことができません。

4

3 に答える 3

7

clone()クラス Object の protected メソッドであるため

公にアクセスしたい場合はclone()、クラスでそのメソッドをオーバーライドする必要があります。

@override
public Object clone()
{
    return super.clone();
}
于 2012-07-29T07:02:08.073 に答える
4

ここでの問題は、それMainが拡張されないことClonedです。現状では、Mainを呼び出すことはできますが、 を呼び出すことはできMain.cloneませんCloned.clone

cloneメソッドが宣言されているという事実は、Objectここでは問題ではありません。パブリック メソッドとは別に、クラスはそれ自身の継承されたメソッドのみを呼び出すことができます。これには、スーパークラスの保護されたメソッドが含まれますが、他の (スーパー) クラスの保護されたメソッドは含まれません。

于 2012-07-29T07:03:10.543 に答える
1
class Main implements Cloneable {

    public static void main(String[] args) {

    }
        
      
    @Override
    protected Object clone() throws CloneNotSupportedException {
        //TODO Auto-generated method stub
        return super.clone();
    }
}
于 2012-07-29T08:23:36.537 に答える