我正在开发 MineSweeper 。在那我有3个包。 1.frontEnd 2.backEnd 3.mineSweeperControl。
mineSweeperControl 包含一个类ActionSplicer ,它实现了ActionListener.In frontEnd 我有一个JBUTTONS数组和一个 ActionSplicer < / strong>对象,这样 splicerobj [i] [j]听按钮[i] [j]。(一对一对应)
backEnd 包含一个对象数组,以便 object [i] [j]具有按钮[i] [j] 的背景细节,例如MineValue,isCellEmpty, isCellFlagged等...
方法 doBackgroundAction(i,j){..} 在类BackEndManager 中定义。 在 ActionPerer 的 actionPerformed 中,我调用 doBackgroundAction(i,j),以便前景中的任何更改也会影响背景。
我的问题出在哪里?
doBackGroundAction(i,j)需要公开,因为它被调用 在不同的包装。
但我不希望任何方法公开,因为它可能会降低灵活性,然后任何人都可以更改属性的值。
我无法扩展BackEndManager类,因为我在frontEnd中创建了一个ActionSplicer对象数组。
因此,我需要一些关于声明doBackGroundAction(i,j)的指导。 在一些不可避免的情境中,将方法声明为公开是否正确? 或者如何更改我的设计以保留具有默认可见性的方法。
答案 0 :(得分:0)
为了不将该方法公开为公开,您可以使用以下内容:
public class BackEndManager {
protected void doBackgroundAction(int i, int j) { ... }
}
然后,只要您需要该方法,就创建一个BackEndManager的子类(因为protected允许子类访问该方法):
public class BackEndManagerSubclass extends BackEndManager {
public void doBackgroundActionNew(int i, int j) {
doBackgroundAction(i, j);
}
}
这使初始类保持不变,并允许您通过“隐藏”BackEndManager
类的真正内部的子类公开新方法。
修改:我刚看到这一行: “我无法扩展BackGroundManager类,因为我在frontEnd中创建了一个ActionSplicer对象数组。”
如果BackGroundManager
表示BackEndManager
,那么我的想法就没用了。你能否明白这一点?根据我的理解ActionSplicer
在mineSweeperControl
包中,而frontEnd
是另一个包,那么与BackEndManager
的连接是什么?