我正在用Java创建一个新的游戏引擎,我想为GameWindow类提供一些公共的静态方法,例如setTitle(),resize(),但我想再创建一个能够创建整个窗口的方法。该方法只能由Engine的类访问,以免开发人员创建窗口(因此,如我在正确的初始化时刻所说,此方法将仅由Engine调用)。

现在如何从世界上隐藏这种方法?我正在寻找c ++中类似“朋友”方式的东西。

这些类(Engine和GameWindow类)在单独的程序包中。

P.s.我在其他一些引擎中找到了使用抽象类的方法,但是如果可能的话,有人可以解释一下该怎么做吗?

最佳答案

您可以使用以下技巧:

class GameWindow {
  GameWindow() {...}
  protected void methodOnlyforEngine() {...}
  ...
}
class Engine {
  private class GameWindowProxy extends GameWindow {
     GameWindowProxy(GameWindow ex) { super();...}
  }

  private final GameWindowProxy proxy;
  Engine(GameWindow window) {
     proxy = new GameWindowProxy(window);
  }
  ...
  proxy.methodOnlyforEngine();
}

10-07 15:32