繁体   English   中英

从父类调用子类的静态方法

[英]Calling subclass's static method from parent class

这是一个奇怪的问题,但我想知道是否有办法在子类中“覆盖”父类的静态方法,并从父类调用该子类的静态方法。

它看起来像这样

public class parentFoo {
    public static void <T extends parentFoo> printFoo () {
        T.printFoo();
    }
}

public class childFoo extends parentFoo {
    public static void printFoo() {
        System.out.println("Foo");
    }
}

所以你可以在你的代码中做这样的事情

 //print out "Foo"
 parentFoo.<childFoo>printFoo();

这不适合我,但我想知道是否有办法使这成为可能。 现在我得到一个堆栈溢出,因为它只调用父类的printFoo方法。

您无法覆盖静态方法。 但是,您可以定义同名的静态方法。 如果这样做,那么您可以指定从类类型中调用哪一个

ChildFoo.printFoo(); // call child foo
ParentFoo.printFoo(); // call parent foo

ParentFoo foo1 = new ChildFoo();
foo1.printFoo(); // ParentFoo still called because of type of reference foo1 not its value

ChildFoo foo2 = new ChildFoo();
foo2.printFoo(); // ChildFoo called because of type of reference foo2 not its value

无法基于泛型类型参数调用静态方法。

以下问题的答案提供了合理的解决方法。

更换

parentFoo.<childFoo>printFoo();

childFoo.printFoo();

为什么需要覆盖 static方法? (这是不可能的)你想要完成什么?

多态调用仅对对象有意义。 由于静态不是一个对象的一部分,而是一个类的一部分,它不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM