看代码:
public class Base
{
public void print(String str)
{
System.out.print("Base print !");
}
}
public class Sub extends{
public void println(String str)
System.out.println("Sub print"));
}
public class Test
{
public static void main(String[] args)
{
Base test=new Sub();
test.print("hello");
}
}
打印的结果是:Sub print !
向上转型,父类的应用调用之类的方法没有问题,但是当子类的参数变为:print(Sring... str)时,test.print("hello"),调用的却是父类的方法。子类的方法按说应该是接收字符串没有问题的,但是却调用了父类的方法。第三种情况,父类的方法参数为String... str,子类的方法参数格式为String[] str时,这时调用test.print("hello"),输出的却是Sub print,这就更难理解了,明明子类方法接收的只是字符串数组,传的是字符串,却能调用!
第四种情况,父类的为 String str,子类的为空时,又调用了父类的方法。好诡异。
有知道原因的请指教