基本クラスの一部のメソッドに、基本クラスから直接派生したクラスからアクセスできるようにしたいが、派生クラスから派生したクラスからはアクセスできないようにするクラス構造があります。Java言語仕様によれば、継承されたメソッドのアクセス仕様をオーバーライドして、それらをよりパブリックにすることは可能ですが、プライベートにすることはできません。たとえば、これは私がしなければならないことの要点ですが、違法です。
// Defines myMethod
public class Base {
protected void myMethod() {}
}
// Uses myMethod and then hides it.
public class DerivedOne extends Base {
@Override
private void myMethod();
}
// can't access myMethod.
public class DerivedTwo extends DerivedOne {
}
これを達成する方法はありますか?
私がこれをしたい理由を説明するために編集されました:
この場合、クラス構造はデータ処理およびインポート構造です。表形式のデータでいっぱいのテキストファイルを読み込んで解析し、データベースに保存します。
基本クラスは、その一部を処理するデータベースを管理する基本テーブルクラスです。すべてのテーブルタイプに共通するかなりの量の機能が含まれています。データベースに入ると、それらは統一されます。
中間クラスは、解析されるファイル内のテーブルの種類に固有であり、テーブルの解析およびインポートロジックを備えています。基本クラスのデータベースアクセス関数の一部にアクセスする必要があります。
トップレベルクラスはテーブルに固有であり、親クラスが理解できる方法でテーブルのレイアウトを初期化するだけです。また、基本クラスのユーザーは、中間クラスが実行するデータベース固有の機能を表示したり、アクセスしたりする必要はありません。本質的に、私はこれらの関数を基本クラスの1つ上のレベルにのみ公開し、他の誰にも公開したくないのです。
私が例として投稿したコードは違法ですが、同じ目的を達成するための他の手段があるかもしれないので、私は尋ねます。あるかどうか聞いています。
おそらく、隠すことはこれを表現する間違った方法です-私が本当にする必要があるのは、基本クラスにプライベートであるはずのいくつかの機能を、階層の1つ上のレベルのクラスに公開することです。非表示にすることでこれを実現できますが、非表示がどのように問題になるかはわかります。これを行う別の方法はありますか?