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);
    }
}

它打印:

测试继承A ClassA

java静态方法(和字段)也有继承(如果您尝试调用类方法,它是否会沿着继承链寻找类方法)。以前不是这样吗?有没有像类方法那样混乱的继承 OO 语言?


显然静态方法是继承的,但不能被覆盖,那么 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 回答