【发布时间】:2010-10-20 20:20:53
【问题描述】:
我正在尝试理解多态性和重载的概念。我有以下代码作为一种实验。但是,我无法弄清楚为什么这个程序没有运行(它失败是因为mobj.foo(str)。mobj 是使用多态定义的,据我所知,应该是MyDerivedClass 类型。如果这是真的, 有问题的线路不能正常工作吗?
为什么那行无效?
class MyBaseClass {
protected int val;
public MyBaseClass() { val = 1; }
public void foo() { val += 2; }
public void foo(int i) { val += 3; }
public int getVal() { return val; }
}
class MyDerivedClass extends MyBaseClass {
public MyDerivedClass () { val = 4; }
public void foo() { val += 5; }
public void foo(String str) { val += 6; }
}
class Test {
public static void main(String[] args)
{
MyBaseClass mobj = new MyDerivedClass();
String str = new String("hello");
mobj.foo();
mobj.foo(str);
mobj.foo(4);
System.out.println("val = " + mobj.getVal());
}
}
【问题讨论】:
-
您能否更具体地说明失败的原因?你得到的结果是什么,你期望的结果是什么?
-
基本上,您将覆盖与重载混淆了。
标签: java oop polymorphism