难以保留需要由不同包访问的方法的默认可见性

时间:2011-11-25 08:28:54

标签: java package public access-specifier

我正在开发 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)的指导。 在一些不可避免的情境中,将方法声明为公开是否正确? 或者如何更改我的设计以保留具有默认可见性的方法。

1 个答案:

答案 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,那么我的想法就没用了。你能否明白这一点?根据我的理解ActionSplicermineSweeperControl包中,而frontEnd是另一个包,那么与BackEndManager的连接是什么?