[英]Java, hiding methods of super super class
我正在将某些OpenGL Nvidia C示例移植到jogl,并且具有以下内容( init
是GLEventListener
所需的抽象方法之一:
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.