1

私が言うなら

class A{
}

次に、暗黙的に Object クラスを継承します。したがって、クラスは次のようになります。

class A{

       protected Object clone(){
       }  /// Here i am not overridning
       //All the other methods (toString/wait/notify/notifyAll/getClass)
}

クラスAの同じパッケージにあるクラスBのclone()メソッドにアクセスできないのはなぜですか。

Class B{
       A a = new A();
       a.clone();
       **
}

//** clone は Object class で保護されていると言います。しかし、私は Object の clone メソッドにアクセスしていません。ここでは、まだオーバーロードしていないクラス A の clone メソッドを呼び出しています。

4

2 に答える 2

3

protectedメソッドは で定義されているためjava.lang.Object、別のパッケージから呼び出すことはできません。サブクラスからのみ呼び出すことができます。

への参照で呼び出していますが、オーバーライドするまでAは のメソッドです。java.lang.Object

オーバーライドするときclone()は、修飾子を に変更しpublicて実装する必要がありますCloneable。ただし、このclone()メソッドを正しく実装するのは非常に難しいため、このメソッドを使用することはお勧めできません。commons-beanutils を使用して浅いクローンを作成します。

「オーバーライド」と「オーバーロード」を区別してください。

于 2010-07-02T09:01:10.000 に答える
1

これは完全に機能します

class A{

       protected Object clone(){
           return this;
       }  
}

public class B{
       public B() {
           A a = new A();
           a.clone();
           System.out.println("success");
       }
       public static void main(String[] args) {
        new B();
    }

}
于 2010-07-02T09:02:23.447 に答える