2010-11-26 67 views
2

嗨 今天早上我碰到了这个问题(我已经找到了解决办法),但我很好奇,为什么我的代码不工作,因为我想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) ,但我得到>(1)...

什么,我不明白的是为什么CLASSA功能(...)(1)将调用(3),而不是(2)

+5

欢迎来到多态。 – 2010-11-26 06:37:25

+0

是的,我一直在玩多态,我只是没有想到一个^^(我知道我们从来没有想过错误,他们只是邀请自己) – 2010-11-26 06:40:05

回答

1

它覆盖(与@Override标示)子类中的function(GL10 gl, boolean useGLUtils, boolean useMipMap)方法,所以每个调用此方法对B类的一个实例时,最重要的方法将被调用,而不是一个与Java的设计决策有关,默认情况下使所有公共方法virtual。在像C++这样的语言中,你明确地必须将函数声明为虚函数,你可以通过上面的代码得到你期望的行为。然而,在Java中,除非使用超级前缀强制它调用更高级的方法,否则调用将始终最终沿着继承链的最远方法行进。