我正在用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();
}