Java无限循环/调用

时间:2010-11-26 06:34:50

标签: java

您好 今天早上我遇到了这个问题(我已经找到了解决办法)但是我很好奇为什么我的代码没有按照我想要的方式工作

    public class classA

    //(1)
    public void function(GL10 gl){

             function(gl,useGLUtilsBool, useMipMapBool);
         }
    //(2)
         public void function(GL10 gl,boolean useGLUtils, boolean 
    useMipMap){
             generateTexture(gl, useGLUtils, useMipMap);
         }
    }

    @Override
    public class classB extends 
    classA{
    //(3)
         public void function(GL10 gl, boolean useGLUtils, boolean 
    useMipMap) {
             function(gl);
         }
    //(4)
    @Override    
     public void function(GL10 gl) {
             super.function(gl);

         }

通常它应该做(3) - >(4) - >(1) - >(2) 但我得到(3) - >(4) - >(1) - >(3) - >(4) - >(1)......

我没有得到的是为什么classA函数(...)(1)会调用(3)而不调用(2)

2 个答案:

答案 0 :(得分:6)

由于继承和polymorphism。您已在子类中重写(使用@Override标记此方法)function(GL10 gl, boolean useGLUtils, boolean useMipMap)方法,因此每次在类B的实例上调用此方法时,都将调用重写方法,而不是超类中的一个

答案 1 :(得分:1)

它与Java的设计决策有关,默认情况下制作所有公共方法virtual。在像C ++这样明确必须将函数声明为虚拟的语言中,您将获得上述代码所期望的行为。 但是在Java中,调用将始终最终转到继承链最下面的方法,除非你使用超级前缀强制它调用更高的方法。