3

Javaの静的メソッドには継承がないと言われましたが、次のテストを試してみると

package test1;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        TB.ttt();
        TB.ttt2();
    }

}

package test1;

public class TA {
static public Boolean ttt()
{
    System.out.println("TestInheritenceA");
    return true;
}
static public String test ="ClassA";
}

package test1;

public class TB extends TA{
static public void ttt2(){
    System.out.println(test);
    }
}

印刷しました:

TestInheritenceA ClassA

したがって、Java静的メソッド(およびフィールド)には継承があります(クラスメソッドを呼び出そうとすると、継承チェーンに沿ってクラスメソッドを探します)。これはそうではありませんでしたか?そして、クラスメソッドのためにそのように台無しにされている継承オブジェクト指向言語はありますか?


明らかに静的メソッドは継承されますが、オーバーライドすることはできません。c#はその問題を共有しますか?他の言語はありますか?

4

3 に答える 3

5

Javaでは、フィールドと静的メソッドは継承されますが、オーバーライドすることはできません。「継承されない」と言った人は、それが意味していると思います。

非プライベート、非静的メソッドは継承され、オーバーライドできます。

于 2010-06-15T11:55:12.747 に答える
3

これは常に当てはまりましたが、クラスメソッドをオーバーライドすることはできません。

class A {
  public static void a() { system.out.println("A"); }
}

class B {
  public static void a() { system.out.println("B"); }
}

A a = new A();
a.a(); // "A"

B b = new B();
b.a() // "B"

a = b;
a.a(); // "A"
于 2010-06-15T11:55:07.427 に答える
0

それが静的の意味です。それはクラスごとを意味します。静的フィールドとメソッドはインスタンス間で共有されます。静的な値を変更すると、インスタンス全体に反映されます。

于 2010-06-15T12:09:31.910 に答える