Java,隐藏超级超类

时间:2016-01-21 07:58:51

标签: java

我正在将一些OpenGL Nvidia C样本移植到jogl,我有以下内容(initGLEventListener所需的抽象方法之一:

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
  • 我希望将NvSampleApp扩展为能够仅查看(并覆盖)initRendering而不是init
  • 的课程

有没有更好的方法,只需将NvSampleApp简单地作为BindlessApp内的变量,例如这样?

public class BindlessApp {    
    private NvSampleApp sampleApp;
}

2 个答案:

答案 0 :(得分:3)

您可以将关键字final用于此目的。

关于Oracle java教程的

Writing Final Classes and Methods

  

你可以声明一些或所有类的方法final。你用的是   方法声明中的final关键字表示该方法   不能被子类覆盖。 Object类执行此操作-a   其方法的数量是最终的。

答案 1 :(得分:1)

  

有没有比仅仅使用NvSampleApp更好的方法了   BindlessApp中的变量,例如这个?

虽然看起来更有效,但封装是一个很好的工具,可以帮助隔离部分代码,减少耦合。

我认为在你的情况下它甚至可能是更好的解决方案:)

有关详细信息,请参阅此答案:https://stackoverflow.com/a/18301036/461499