メソッドfoo()
が基本クラスにprotected
として存在する場合、サブクラスでpublic
記述子を使用してメソッドを定義するとどうなりますか?異なるアクセス記述子でオーバーライドされたメソッドをマークするとどうなりますか?
1
A
答えて
1
詳細にアクセスできます。 Java言語仕様section 8.4.8.3から:
オーバーライドまたは隠蔽方法のアクセス修飾子(6.6)は、オーバーライド又は隠し方式と少なくとも同じくらいのアクセスを提供しなければならない、またはコンパイル時エラーが発生します。詳細:
- オーバーライドまたは非表示のメソッドがpublicの場合、オーバーライドまたは非表示のメソッドはpublicでなければなりません。それ以外の場合は、コンパイル時エラーが発生します。
- オーバーライドされたメソッドまたは隠されたメソッドが保護されている場合は、オーバーライドまたは隠蔽のメソッドを保護またはパブリックにする必要があります。それ以外の場合は、コンパイル時エラーが発生します。
- オーバーライドまたは非表示のメソッドにデフォルト(パッケージ)アクセスがある場合は、オーバーライドまたは非表示のメソッドをプライベートにすることはできません。それ以外の場合は、コンパイル時エラーが発生します。
1
オーバーライドされるメソッドが緩い権限(例えば、公共の代わりに保護された)を有する場合、そのサブクラスの任意の参照は、オーバーライド許可の方法を有することになります。オーバーライドされたメソッドの権限がより厳格な場合、コンパイルエラーです。
JLS 8.4.8.3を参照してください(オーバーライドまたは隠蔽方法のアクセス修飾子(6.6)は、少なくともオーバーライドまたは隠しメソッドと同じアクセスを提供する必要があります)、またはコンパイル時エラーが発生します。
0
アクセス記述子を変更してメソッドのアクセスを増やしても問題はありませんが、サブクラス内のどのメソッドのアクセスも減らすことはできません。
class A{
protected void foo(){
}
}
class B1 extends A{
public void foo(){
}
}
class B2 extends A{
private void foo(){
}
}
class Example{
public void ex(){
A b1 = new B1();
A b2 = new B2();
b1.foo();
b2.foo();
}
}
b1.foo()は何の問題を作成しませんが、私たちは、コンパイル時にb2.foo()を許可するかどうかは、実行時に失敗します。そのため、メソッドのオーバーライド中にユーザーが任意のメソッドのアクセスを減らすことはできません
関連する問題
- 1. ジャスミンテスト異なる方法で記述された変数を設定するメソッド
- 2. 親が開いたリスナーソケットファイル記述子を子が閉じないとどうなりますか?
- 3. オーバーライドされたメソッドをfinalとしてマークすることは可能です
- 4. 基本メソッドがVBでオーバーライドされたメソッドを呼び出すとどうなりますか?
- 5. 読み取り可能なファイル記述子と書き込み可能なファイル記述子を待ちます
- 6. python記述子オブジェクトに格納された状態は、記述子の外部でどのようにアクセスできますか?
- 7. 既存の.netタイプのタイプ記述子をオーバーライドすることは可能ですか?もしそうなら
- 8. ビデオフォーマットが異なると、Gistの記述子や分類子に違いがありますか?
- 9. Javaでオーバーライドされたメソッドのアクセス修飾子を変更しますか?
- 10. なぜファイル記述子に誤りがありますか?
- 11. 異なるプロセス間でファイル記述子を渡す移植可能な方法
- 12. .close()が失敗したときに、Python 3でファイル記述子はどうなりますか?
- 13. 一般的な匿名メソッドはどのように記述できますか?
- 14. 無効なファイル記述子を閉じると何が行われますか?
- 15. DAOImplクラスでさまざまなメソッドを記述する際にコードが重複しないようにするにはどうすればよいですか?
- 16. php子クラスでメソッドがオーバーライドされているかどうかを調べる
- 17. C++でのファイル記述子のなりすまし
- 18. Pythonの記述子 "__get__"が期待通りに呼び出されなかったのはなぜですか?
- 19. より限定的なアクセス修飾子を持つメソッドをオーバーライドする
- 20. D Python記述子のようなメタプログラミング?
- 21. NSObjectの記述方法をオーバーライドする
- 22. Java:親メソッドをオーバーライドできますか?パラメータは異なりますか?
- 23. JSPを使用すると、デプロイメント記述子(web.xml)は廃止されますか?
- 24. 入れ子になったインスタンス値の入れ子になったネストされた記述子
- 25. オーバーライドURLの記述
- 26. Player.Start()はオーバーライドとしてマークされていますが、オーバーライドする適切なメソッドが見つかりません
- 27. Java 9モジュール記述子リファレンスはどこにありますか?
- 28. アプリケーション記述子は、ブラックベリーに他のアプリケーション記述子を与えることができますか?
- 29. PHP 5.4:なぜ、クラスは異なるシグネチャでtraitメソッドをオーバーライドできますか?
- 30. なぜtoString()メソッドは別のステートメントとして記述されたときに別の動作をしますか?