質問: 異なるパッケージによってアクセスされる必要のあるメソッドのデフォルトの可視性を保持することができない 私は **MineSweeper** を開発しています。それで私は3つのパッケージを持っています。 1.frontEnd 2.backEnd 3.mineSweeperControl。 **mineSweeperControl** contains an **class ActionSplicer** which implements ActionListener.In **frontEnd** I have an array of JBUTTONS and an array of **ActionSplicer** objects, such that **splicerobj[i][j] listens to button[i][j].(one to one correspondence)** **backEnd** contains an array of objects such that **object[i][j] has the background details of button[i][j]** such as MineValue,isCellEmpty,isCellFlagged etc... メソッド **doBackgroundAction(i、j){..}** は、**クラスBackEndManager** で定義されています。 **ActionPplicer** の **actionPerformed** では、フォアグラウンドの変更が背景にも影響するように **doBackgroundAction(i、j)**を呼び出します。 > **私の問題はどこですか?** > > > > **doBackGroundAction(i、j)**は呼び出されてからパブリックにする必要があります > 別のパッケージにしてください。 > > しかし、柔軟性を低下させる可能性があるため、誰かが属性の値を変更する可能性があるため、方法を公開することは望ましくありません。 私はfrontEndにActionSplicerオブジェクトの配列を作成しているので、クラスBackEndManagerを拡張することはできません。 したがって、doBackGroundAction(i、j)を宣言するためのガイダンスが必要です。 それは回避不可能な状況で公衆として方法を宣言するのが正しいかどうか? または、デフォルトの可視性でメソッドを保持するようにデザインを変更するにはどうすればよいですか?
回答: そのメソッドを公開しないようにするには、次のようなものがあります: ``` public class BackEndManager { protected void doBackgroundAction(int i, int j) { ... } } ``` 次に、メソッドが必要なときはいつでも、BackEndManagerのサブクラスを作成します(保護されているので、サブクラスはメソッドにアクセスできます)。 ``` public class BackEndManagerSubclass extends BackEndManager { public void doBackgroundActionNew(int i, int j) { doBackgroundAction(i, j); } } ``` これにより初期クラスは元の状態に保たれ、 `BackEndManager` クラスの実際の内部を「隠す」サブクラスを通して新しいメソッドを公開することができます。 **Edit**: I just saw this line: "I cannot extend the class BackGroundManager since I am creating an array of ActionSplicer objects in frontEnd." `BackGroundManager` によって `BackEndManager` を意味する場合、私の考えは役に立たない。この点をもっと明確にしてください。 `BackEndManager` との接続は、 `BackEndManager` との接続が何であるかを理解していることから、 `ActionSplicer` は `mineSweeperControl` ?