1

Pythonでは、クラスメソッドを継承できます。例えば

>>> class A:
...  @classmethod
...  def main(cls):
...   return cls()
...
>>> class B(A): pass
...
>>> b=B.main()
>>> b
<__main__.B instance at 0x00A6FA58>

Javaで同等のことをどのように行いますか?私は現在持っています:

public class A{
    public void show(){
        System.out.println("A");
    }
    public void run(){
        show();
    }
    public static void main( String[] arg ) {
        new A().run();
    }
}
public class B extends A{
    @Override
    public void show(){
        System.out.println("B");
    }
}

B.main()を呼び出して「B」を出力したいのですが、「new A()」がハードコーディングされているため、代わりに「A」が出力されることは明らかです。

「newA()」をどのように変更して、ハードコードされたクラスAではなく、呼び出されたときにそのクラスを使用するようにパラメーター化されますか?

4

5 に答える 5

1

Java の静的メソッドはclassmethods ではありませんstaticmethod。一般に、静的メソッドがどのクラス参照から呼び出されたかを知ることはできません。

于 2010-01-28T19:48:20.940 に答える
1

クラスにメソッドがなく、静的メソッドが継承されていBません。main

于 2010-01-28T19:28:29.990 に答える
1

これが起こっていることを確認できる唯一の方法は、呼び出しているものを見つけて、代わりA.main( String[] arg )に呼び出すように変更することです。B.main

B.メイン:

   public static void main( String[] arg ) {
        new B().run();
    }

プログラムはどのように開始されますか? バッチファイル、ショートカットなどはありますか? 変えられるもの?どこでA.main呼び出されますか?

于 2010-01-28T19:31:08.747 に答える
0

これは不可能だと思います。理由は次のとおりです。

Javaでは、メソッドの実装はインスタンスの実行時型によって決定されます。したがって、を実行するB.show()には、のインスタンスが必要ですB。インスタンスを構築するメソッドが継承されることになっている場合、これを行うために私が見ることができる唯一の方法はClass.newInstance()、実行時に不明なタイプのインスタンスを構築するために使用することです。

newInstanceそれに関する問題は、静的メソッド内では、それを含むクラスへの参照がないため、誰のメソッドを呼び出すかがわからないことです。

しかし、なぜあなたはこれをしたいのですか?あなたが達成したいことは何でも達成するためのより良い方法があるかもしれません。

于 2010-01-28T19:20:33.553 に答える
0

あなたの例では、メイン メソッドを A の中に入れません。これは、システムへのエントリ ポイントとして設定されます (具体的に A に入る場合は、B に入ることができません)。

以下の例では、クラス A、B、および C を作成しました。クラス C は、A と B をインスタンス化して実行します。CI で A、B、および B としてインスタンス化する別の A を作成したことに注意してください。私の出力は次のとおりです。A B B

うまくいけば、これは理にかなっています。

public class A { 
public void show(){ 
    System.out.println("A"); 
  } 

public void run(){ 
    show(); 
  }  
} 

public class B extends A { 
 @Override 
 public void show(){ 
    System.out.println("B"); 
    } 
 } 

public class C {
public static void main(String[] args) {
    A a = new A();
    B b = new B();
    A anothera = new B();

    a.show();
    b.show();
    anothera.show();
   }
}
于 2010-01-28T19:23:32.857 に答える