間違った考え方。
あなたはオーバーライド、実行時に特定の保護レベルは、あなたが急になったり、今悪いソースコードを書くことが許可されていることを意味しないことができるという事実
(または将来的に)。
実行時にこれらのキーワードを使用して保証を設定することはありません。これは望ましい副作用ですが、実際のこれらのキーワードのポイントではありません。あなたは主にの意図を表現するためにそれらを使用します!人間の読者のためにソースコードを理解しやすくする。それは何もありませんあなたはリフレクションを使用して実行時に行うことができます。
javacコンパイラは、ソースコードをバイトコードに変換します。 JVMジャストインタイムコンパイラはある時点でJavaバイトコードをマシンコードに変換します。あなたのロジックに従うときは、Javaでプログラムを書くのをやめて、マシンコードを直接書くべきですか?とにかく、実行時にマシンコードだけが存在するため、あなたは知っていますか? (私は最高の比較ではなく、ランタイム機能がソースコードの内容と何の関係もないという事実を強調することを目的としています)。その向こう
:セキュリティマネージャその周りがこの保護を無効にするからできないことがありますまだそこにあります。
反射を使用することは、非常に特定のコーナーケースでのみ行う必要があることをご理解ください。リフレクションはパフォーマンスのキラーです。それは非常に扱いにくく、また非常にエラーを起こしやすい。それはあなたがなし他の選択を持っているときにだけを使用するJavaのこれらの機能の一つです。あなたが「毎日の仕事」のために選ぶ「普通の」ツールのセットではではなく、です。
最後に、Java 9が導入したモジュールのコンセプトは、もはやモジュール内の何にでもアクセスすることを許可しなくなりました。公開された公開された要素だけがアクセス可能です。それは反射にも当てはまります。もう少し複雑で、動作を変更するコマンドラインスイッチもありますが、どこにでも簡単にアクセスできる時間は基本的には番号が付けられています。
「今」とは「基本的に永遠に」という意味ですか?なぜあなたは抽象的/カプセル化を捨てたいのですか?反射は強力なツールですが、めったに使用しないでください。アクセス修飾子は、99.9%のケースで私たちの生活をより生産的に(そして危険性を低く)します。 –
あなたが何かをすることができたからといって、あなたが意味するものではありません。 APIデザイナーは、理由のために行った修飾子を追加することをおそらく決定しました。 – NilsH
また、「車はスピード制限を超えることができます。なぜスピード制限があるのですか?合法的にすべての人が法律で許可されるべきではありません。 –