【问题标题】:Class Methods Inheritance类方法继承
【发布时间】:2011-03-03 22:57:06
【问题描述】:

我被告知 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 A类

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


显然静态方法是继承的,但不能被覆盖,那么 c# 是否也存在这个问题?有其他语言吗?

【问题讨论】:

    标签: java inheritance static oop class-method


    【解决方案1】:

    这就是静态的意思。这意味着每堂课。静态字段和方法在实例之间共享。如果您更改静态值,它会反映在多个实例中。

    【讨论】:

    • 方法总是在实例之间共享,无论天气如何,它们是否被标记为静态。请更改声明。
    • 我已经提到了静态值。方法就是行为。
    【解决方案2】:

    在 Java 中,字段和静态方法是继承的,但不能被覆盖 - 我相信这就是告诉你“它们不是继承”的人的意思。

    非私有、非静态方法被继承,可以被覆盖。

    【讨论】:

    • 在答案中添加“非最终”:)
    • 我完全忘记了这个问题,几天前在 irc 上讨论 java 时犯了同样的错误。
    【解决方案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"
    

    【讨论】:

    • 如果 B 不扩展 A,则分配将不起作用,整个问题将毫无意义......:D
    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 2018-02-04
    • 2012-11-20
    • 2011-12-15
    • 2015-05-08
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多