2016-01-21 161 views
1

我移植一些OpenGL的Nvidia的C個採樣到JOGL的方法和我有以下的(init是由GLEventListener所需的抽象方法之一:Java中,隱藏超級超級類

public abstract class NvAppBase implements GLEventListener { 
    @Override 
    public void init(GLAutoDrawable drawable) { 
     initRendering(gl4); 
    } 
    public void initRendering(GL4 gl4) { 
    } 
} 

public abstract class NvSampleApp extends NvAppBase { 
    @Override 
    public void init(GLAutoDrawable drawable) { 
     baseInitRendering(gl4); 
    } 
    protected void baseInitRendering(GL4 gl4) { 
     initRendering(gl4); 
    } 
    @Override 
    public void initRendering(GL4 gl4) { 
    } 
} 
public class BindlessApp extends NvSampleApp{  
    @Override 
    public void initRendering(GL4 gl4) {  
    } 
} 

鑑於:

  • NvAppBase不使用在所有,所有的樣品(如BindlessApp)總是延伸NvSampleApp
  • 我想延伸的類要能看到(和覆蓋)只有initRendering,不也是init

難道還有比僅僅有NvSampleApp僅僅作爲內部BindlessApp一個變量,像這樣的例如一個更好的辦法?

public class BindlessApp {  
    private NvSampleApp sampleApp; 
} 
+1

您是否在尋找'final'? – tkausl

回答

3

您可以使用關鍵字final來實現此目的。

Writing Final Classes and Methods關於Oracle java教程。

您可以聲明某個或某些類的方法是final的。在方法聲明中使用 final關鍵字指示方法 不能被子類覆蓋。對象類這樣做 - 其 其方法的數量是最終的。

+0

是的,對,它完美的工作......謝謝你,我可以接受它在3米 – elect

1

難道還有比僅僅有NvSampleApp僅僅作爲內部BindlessApp一個 變量,這樣,例如更好的辦法?

雖然它看起來像更多的工作,封裝是一個偉大的工具,以幫助找出你的代碼減少耦合的部分。

我想在你的情況下,它甚至可能是更好的解決方案:)

詳情請參見這個答案:https://stackoverflow.com/a/18301036/461499

+0

我想與Ferrybig的答案去,但無論如何感謝有趣的鏈接 – elect