dfe*_*r88 3 java oop polymorphism
我试图理解多态和重载的概念.我有以下代码作为一种实验.但是,我无法弄清楚为什么这个程序没有运行(因为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());
}
}
Run Code Online (Sandbox Code Playgroud)
它的失败是因为
MyBaseClass mobj = new MyDerivedClass();
Run Code Online (Sandbox Code Playgroud)
你告诉编译器mobj是一个MyBaseClass,所以它不知道有一个foo(String)方法.
这种事情在运行时得到解决.
| 归档时间: |
|
| 查看次数: |
314 次 |
| 最近记录: |