質問: ### 前提・実現したいこと こんにちは、毎度お世話になります。 現在Javaでツクールみたいに、マップチップを使ったゲームを作っています。そこで継承についてわからないことがあったので質問させていただきます。 ### 発生している問題 現在2つのクラスを作っています。マップチップ1マスぶんの情報(座標、画像、当たり判定の有無等々)を管理するMapChipクラスと、それを継承したMapObjectクラス(プレイヤーや敵みたいに動くものを扱う)です。 MapObjectにおいてどうやって移動させればよいかについて悩んでいます。具体的には、子クラス側でmoveメソッドを定義して動かそうと考えています。しかし、親クラスではフィールドxとyはprivateのため、アクセスできません(当然ですが)。だからと言って、それをprivate以外に変えたくありません(座標を子クラス以外のクラスから勝手に変えられたら困る)。 どのようにしたら2つの要求を同時に満たせるでしょう? 以上です。よろしくお願いします。 ### 思いついた方法 ``` 1. 親クラス側でmoveメソッドを用意する(座標が不変な親クラスでmoveメソッドを定義するのは変?) 2. 親クラス側でsetterを用意して座標を変更する(上記と同じ理由で座標を変更するメソッドは変?)。 3. あきらめてアクセス制限をprotectedに変更する 4. そもそも継承するのをやめるべき ```
回答: **継承するのがおかしい**んじゃないですかね。 マップチップというからには**地形に関係するもの**のはずですよね? プレイヤーや敵は動くものなので、それをマップチップを継承することで表すとしたら、 それはプレイヤーを地形と同列に扱うことになります。それは変ですよね? なので、そもそも継承するべきではないのです。