考虑一个超类:
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:我想知道这种方法是对还是错?
问题2:如果使用函数调用语句代替引用变量,返回对象的入口,那么将是什么过程?我认为返回入口的函数的返回类型将用于确定多态性的类型。我说得对吗?
发布于 2018-11-05 07:26:27
在Java中,对于任何可重写的方法,您总是具有运行时多态性!编译器不能知道类的所有可能派生,所以不能遵循上面的算法。
AFAIK,逻辑如下:
发布于 2018-11-05 07:50:52
我认为所有语句都是java中的运行时多态性,每个非静态方法在运行时绑定。对象在运行时引用,因此在编译时不存在任何对象,所以当您在将运行时绑定的对象的帮助下调用任何方法时,总是这样。在这里,代码函数是由对象调用的,这所有语句都是运行时多态,另一件事是函数重写将始终是运行时多态,因为引用在运行时会外泄到对象,但是函数重载可能是在运行时,或者在编译时,当您重载将在运行时进行绑定的非静态函数时,或者当您重载静态memeber时,只有该函数才会在编译时绑定。
https://stackoverflow.com/questions/53149311
复制相似问题