如果我有一个SubOfParent类,它是Parent的子类,还有两个方法:
public static void doStuff(Parent in) {}
public static void doStuff(SubOfPArent in) {}
Run Code Online (Sandbox Code Playgroud)
为什么在传递SubOfParent类型对象时会调用第一个 doStuff?
感谢您对此有任何见解!
Mar*_*k H 12
Parent p = new SubOfParent();
SubOfParent s = new SubOfParent();
doStuff(p); //calls doStuff(Parent in)
doStuff(s); //calls doStuff(SubOfParent in)
//If you're working with a parent but need to call the subclass, you need to upcast it.
dostuff(p as SubOfParent);
Run Code Online (Sandbox Code Playgroud)
方法重载是在编译时完成的,而不是在运行时完成的,所以你不会看到它的任何多态性.无论调用代码知道什么类型,都将指定调用哪个方法.
如果你想调用第二种方法,你可以转换为类型,SubOfPArent或者你可以将这些方法放入类中,然后调用它来获取多态:
public class Parent
{
public virtual void doStuff() {}
}
public class SubOfPArent : Parent
{
public override void doStuff() {}
}
Run Code Online (Sandbox Code Playgroud)
...
Parent obj = getASubOfPArent();
obj.doStuff();
Run Code Online (Sandbox Code Playgroud)