Java重定义方法
我无法清楚地了解Java中重新定义的方法。 下面是我在Eclipse中尝试执行的两个示例 例1: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
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来避免这种情况