2016-01-21 4 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
  • Я хотел бы класс, расширяющий NvSampleApp, чтобы быть в состоянии видеть (и перезаписать) только initRendering и не также init

Есть ли лучший способ, чем просто NvSampleApp просто как переменную внутри BindlessApp, как это, например?

public class BindlessApp {  
    private NvSampleApp sampleApp; 
} 
+1

Вы ищете 'final'? – tkausl

ответ

3

Для этой цели можно использовать ключевое слово final.

Writing Final Classes and Methods по учебному пособию по Java.

Вы можете объявить некоторые или все методы класса final. Вы используете ключевое слово в объявлении метода, чтобы указать, что метод не может быть переопределен подклассами. Класс Object делает это: Число его методов является окончательным.

+0

Да, это прекрасно работает ... спасибо, человек, я могу принять его в 3 м. – elect

1

Есть ли лучший способ, чем просто NvSampleApp просто как переменной внутри BindlessApp, как это, например?

Хотя кажется, больше работы, инкапсуляции является отличным инструментом, чтобы помочь изолировать части коды уменьшения связи.

Я думаю, в вашем случае это может быть даже лучшим решением :)

Смотрите более подробно этот ответ: https://stackoverflow.com/a/18301036/461499

+0

Я хотел бы поговорить с ответом Феррибига, но в любом случае спасибо за интересную ссылку – elect

Смежные вопросы