2010-11-26 47 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中,除非使用超級前綴強制它調用更高級的方法,否則調用將始終最終沿着繼承鏈的最遠方法行進。