如果父类对象new子类,调用共有函数时的取舍关系:
规则是编译时看数据类型,运行时看实际的对象类型(也就是new的哪个类)。一句话:new谁就用谁的方法
例子一:
class test
{
public void runtest(String s)
{
System.out.println("run test constructor"+s);
}
}
class test2 extends test{
public void runtest(String s1){
System.out.println("test2"+s1);
}
}
public class hello {
public static void main(String[] args)
{
test t = new test2();
t.runtest("ss");
}
}
输出结果:
test2ss
例子二:
如果函数重载的参数类型不同,则要求调用的函数方法传的参数与父类一致。并且会调用父类的方法
class test
{
public void runtest(String s)
{
System.out.println("run test func "+s);
}
}
class test2 extends test{
public void runtest(int s1){
System.out.println("test2"+s1);
}
}
public class hello {
public static void main(String[] args)
{
test t = new test2();
t.runtest("ss"); //如果为t.runtest(1)则会编译不通过
}
}
输出结果:
run test func ss