Java重定义方法

Java重定义方法,java,Java,我无法清楚地了解Java中重新定义的方法。 下面是我在Eclipse中尝试执行的两个示例 例1: public class MyFirstJavaClass { public static void main(String[] args) { Bar f = new Bar(); f.instanceMethod(); f.classMethod(); } } class Foo { public

我无法清楚地了解Java中重新定义的方法。 下面是我在Eclipse中尝试执行的两个示例

例1:

public class MyFirstJavaClass {
    public static void main(String[] args)
    {
         
       Bar f = new Bar();
       f.instanceMethod();
       f.classMethod();
    }
}


class Foo {
    public static void classMethod() 
    {

        System.out.println("classMethod() in Foo");
    }

    public void instanceMethod() 
     {
        System.out.println ("instanceMethod() in Foo");
     }
        }

 class Bar extends Foo {
    public static void classMethod()  
    {
        System.out.println ("classMethod() in Bar");
    }

    public void instanceMethod() {
        System.out.println ("instanceMethod() in Bar");
    }
           
}
示例1的输出:

条形图中的instanceMethod()

条形图中的classMethod()

例2:

class Dog extends Animal {

    static void dostuff() { // it's a redefinition,// not an override
        System.out.print("dddd ");
   }
    
    
    public static void main(String [] args) {
      Dog obj = new Dog();
      obj.doStuff();
   }
}


class Animal {
    static void doStuff() {
       System.out.print("aaaa ");
   }
}
示例2的输出:

aaaa

我无法从概念上理解示例2的输出。 在示例2中,即使我替换了语句
Dog obj=new Dog()
使用
Animal obj=new Animal
,输出仍然相同,即aaaa

当语句是
Dog obj=new Dog()时,为什么示例2的输出是是aaaa。
我猜测输出为dddd,但我错了

如果有人能解释这件事,那就太好了。
多亏了前面的一切。

在类
Dog
中,方法名称是
dostuff
,而在类
Animal
中,它被称为
dostuff
,这意味着它们是不同的方法。

你的编译器没有给你一个f.classMethod()的错误吗;在example1?@niilzon中,通过实例调用静态方法不是一个错误,它只是一种糟糕的风格(而且容易引起误解),该程序编译得很好..没有错误请扫描您的代码是否正确缩进?感谢Berger指出错误。嗨,Nadir…非常感谢…我刚刚错过了…非常感谢您指出了我的错误…从早上开始,我一直盯着代码,但没能捕捉到错误…)Thanks@BlueStar使用IDE来避免这种情况