サブクラス内のスーパー クラスのインスタンス変数またはメソッドの可視性を下げることはできません。
スーパー クラスに.. があるとします。また、サブ クラスpublic method
の可視性を下げることが許可されているとします。private
次に、このようなオブジェクトを作成し、そのスーパー クラスのメソッドにアクセスするとどうなるかを確認します。
SuperClass obj = new SubClass();
obj.pubMethod();
ここで、コンパイル時に、コンパイラはメソッドpubMethod()
が で公開されSuperClass
ていることを確認し、アクセスを許可します。RHS ではチェックしないことに注意してくださいinstance type
。
実行時に、インスタンスが であることを JVM がチェックするSubClass
と、呼び出そうとする実際のメソッドがSubClass
..
しかし、待ってください.. あなたが作ったものJVM
を探しに行っpubMethod
たときに何が起こったのか見ました..BOoooooMMM - Aクラッシュ..SubClass
private
だからこそ許されない..
だから、あなたはそれをプライベートにすることはできません..
JLSセクションから- 8.4.8.3: -
オーバーライドまたは非表示のメソッドのアクセス修飾子 (§6.6) は、少なくともオーバーライドまたは非表示のメソッドと同じ量のアクセスを提供する必要があります。そうしないと、コンパイル時エラーが発生します。さらに詳細に:
オーバーライドまたは非表示のメソッドがパブリックの場合、オーバーライドまたは非表示のメソッドはパブリックである必要があります。そうしないと、コンパイル時エラーが発生します。
オーバーライドまたは非表示のメソッドが保護されている場合、オーバーライドまたは非表示のメソッドは保護またはパブリックである必要があります。そうしないと、コンパイル時エラーが発生します。
オーバーライドまたは非表示のメソッドにデフォルト (パッケージ) アクセス権がある場合、オーバーライドまたは非表示のメソッドはプライベートであってはなりません。そうしないと、コンパイル時エラーが発生します。