Я пытаюсь понять понятия полиморфизма и перегрузки. У меня есть следующий код в качестве эксперимента. Однако я не могу понять, почему эта программа не запускается (происходит сбой из-за того, что 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());
}
}