Java-静态方法重写
我在很多地方读到静态方法不能被重写。然而,我编写了一个示例查询进行测试,似乎我的静态方法被覆盖了 以下是我的疑问:Java-静态方法重写,java,static,overriding,Java,Static,Overriding,我在很多地方读到静态方法不能被重写。然而,我编写了一个示例查询进行测试,似乎我的静态方法被覆盖了 以下是我的疑问: public class staticTestDriver{ public static void main(String[] args){ subClass.print(); //seems the print() method has been overridden } } class superClass { static void
public class staticTestDriver{
public static void main(String[] args){
subClass.print(); //seems the print() method has been overridden
}
}
class superClass {
static void print(){
System.out.println("this is static");
}
}
class subClass extends superClass{
static void print(){
System.out.println("This is overridden");
}
}
输出为“这被覆盖”。有什么想法吗?因为静态方法是通过显式指定类名来调用的,所以任何多态性尝试都是无效的 换句话说。的确,您可以在子类中隐藏/隐藏/替换静态方法,但由于您从未在任何实例上调用静态方法,因此重写任何内容的唯一目的就失去了。在编译时,您已经知道要调用哪个类
因此,即使您的代码是有效的java,它也不能满足重写方法的定义。谢谢大家。我发现一篇文章对这种情况做了很好的解释。请查收 此外,我同意你的观点,这不适用于覆盖。因为“重写依赖于拥有类的实例。”(引用) 所以如果我按照Robert Bain提到的代码
superClass myClass = new subClass(); myClass.print();
输出将是“这是静态的”,这意味着没有发生重写。您应该阅读这篇文章,这不是重写的意思。这只是隐藏。这不是覆盖,而是。考虑到调用
static
方法的static
上下文,我认为它不能被视为隐藏。如果是超类myClass=newsubclass();myClass.print()