解决父类引用调用子类对象当中,引用调用函数的常见问题。该引用只能调用子类中与父类同名的函数,否则报错。
虚拟机在调用重载函数时,是通过参数的静态类型作为调用重载函数的判定依据,而不是动态类型
public class Dis
{ static class QQ {}static class _360 {}
static class sqq extends QQ{}
public static class F{
public void f1(QQ arg)
{ System.out.println("F QQ"); }public void f1(_360 arg)
{ System.out.println("F 360"); }//public void f1(sqq arg)
//{ System.out.println("F sqq 360"); //}}
public static class S extends F{public void f1(QQ arg)
{ System.out.println("S QQ"); }public void f1(_360 arg)
{ System.out.println("S 360"); } public void f1(sqq arg) { System.out.println("s sqq 360"); }}
public static void main(String[] args){F son = new S();//son只能调用子类中与父类同名的函数,否则报错.
sqq sq = new sqq();
son.f1(sq);//调用重载函数时,找不到对应数据类型的重载函数,就会寻找离该数据类型最近的重载函数(自动类型转化)
//不注释父类的f1(sqq arg),打印出s sqq 360,注释父类的f1(sqq arg),打印S QQ
QQ qq = new sqq();
//qq 是静态类型,new sqq()是动态类型
//虚拟机在重载时,是通过参数的静态类型作为判定依据,而不是动态类型
son.f1(qq);
//打印结果是S QQ
}
}