考虑一个超类:
class superclass
{
public void fun() {.....}
}
它是子类:
class subclass extends superclass
{
public void fun(){.......}
public static void main()
{
superclass sup1=new superclass();
sup1.fun()//statement 1
superclass sup2=new subclass();
sup2.fun() //statement 2
subclass sub1=new subclass();
sub1.fun()//statement 3
}
}
我按照以下方式确定语句 1,2 和 3 是编译时多态还是运行时多态:
编译器首先确定调用语句中使用的引用变量的类类型,然后编译器检查源代码中是否存在此基的派生类以及调用语句中使用的方法是否在派生类中被覆盖. 如果找到派生类并且它包含函数的重写版本,则在运行时确定引用变量所引用的对象的类型,并执行该类的类型函数(运行时多态性),否则类中存在函数(引用变量所属的)被执行(编译时多态性)。
通过这种方式: 1) 语句 1 将导致运行时多态性。
2)语句2也会导致运行时多态性。
3)语句3会导致编译时多态。
问题1:我想知道这种做法是对还是错?
问题 2:当使用返回对象地址的函数调用语句代替引用变量时,过程会是什么?我认为返回地址的函数的返回类型将用于确定多态的类型。我对么?