1

次のコード サンプルを見てください。

public class Test{

   public static void main(String[] args){

        System.out.println(new Test());


       System.out.println(new Test(){

        public String toString(){
             return "manual override";
         }

       });



      System.out.println(new Test(){

              public String gm(){
                    return  "manual gm";
               }
        }.gm());
     }  //end of main method

   public String gm(){
     return "gm";
    }
}

toString()まったく異なるクラスである匿名の内部クラスでメソッドがオーバーライドされているという議論があるかもしれません。
ただし、オーバーライド コードは同じクラスに存在します。では、[上記のように] 状況によっては、同じクラスのメソッドのオーバーライドが可能であると結論付けることは正当化されますか?

4

7 に答える 7

3

まず、Test.javaクラスで toString を定義していません。

次に、匿名クラスを作成すると、概念的にはサブクラスの作成に似ています。したがって、親メソッドが final でない限り、匿名クラスでのオーバーライドが許可されます。

主に、それ以外の場合、同じクラスでオーバーライドすることはできません。

于 2012-06-13T09:34:39.223 に答える
2

答えはいいえです。1 つのクラスで同じメソッドをオーバーライドすることはできません。匿名内部クラスは別のクラスです。

于 2012-06-13T09:33:54.853 に答える
1

The code above overrides toString() method of Object class. So you cannot say that it overrides in the same class. Now also it is overriding a superclass method and here the super class is Object which is the super class of all classes.

于 2012-06-13T09:34:12.247 に答える
0

あるクラスでは、同じ署名を持つメソッドを持つことはできません。これは、同じクラスにオーバーライド メソッドを持つ必要がないためです。

したがって、同じクラスでメソッドをオーバーライドすることはできません。同じメソッド名を使用したい場合は、署名を変更してメソッドをオーバーロードできます。

于 2012-06-13T09:44:32.993 に答える
0

いいえ、サブクラスでのみメソッドをオーバーライドできます。

public String toString(){
         return "manual override";
     }

あなたの場合、クラスメソッドObject's toString()ではなくメソッドをオーバーライドしていますTest

于 2012-06-13T09:37:06.037 に答える