繁体   English   中英

Java,super超类的隐藏方法

[英]Java, hiding methods of super super class

我正在将某些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不使用NvAppBase ,所有示例(例如BindlessApp )始终扩展NvSampleApp
  • 我希望该类扩展NvSampleApp使其能够仅看到(覆盖) initRendering而不是init

难道还有比只是有一个更好的办法NvSampleApp仅仅作为内部变量BindlessApp ,这样例如?

public class BindlessApp {    
    private NvSampleApp sampleApp;
}

为此,可以使用关键字final

在Oracle Java教程上编写最终的类和方法

您可以将某些或所有类的方法声明为final。 您可以在方法声明中使用final关键字,以指示该方法不能被子类覆盖。 Object类执行此操作-它的许多方法都是最终的。

有没有比仅将NvSampleApp作为BindlessApp内部的变量更好的方法呢?

尽管看起来似乎需要做更多的工作,但是封装是一个很好的工具,可以帮助减少代码的耦合,从而减少代码的耦合。

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

请参阅以下答案以了解更多详细信息: https : //stackoverflow.com/a/18301036/461499

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM