5

JavaとC#のアクセス修飾子を比較していました。protected internalJavaでC#の代替を見つけたかったのです。protectedしかし、修飾子が両方の言語(C#Java )で異なることに気づきました。メンバーも同じパッケージ内でアクセスできるため、protectedJavaではC#と同等です。protected internal

2つの質問があります

  • JavaとC#で同じ修飾子に異なる意味を作成したのはなぜですか?
  • protectedJavaでC#(アクセスは包含クラスまたは包含クラスから派生した型に制限されています)を使用するにはどうすればよいですか?
4

2 に答える 2

2

JavaとC#で同じ修飾子に異なる意味を作成したのはなぜですか?

単純さと、さまざまなアクセス権を正確に指定する機能のどちらかを選択する必要がありました。Javaの作成者と(後で)C#の作成者によってさまざまな選択が行われました。

JavaでC#(アクセスは包含クラスまたは包含クラスから派生したタイプに制限されています)を保護するにはどうすればよいですか?

できません。Javaはこの点でより制限されています。

protectedただし、どちらの使用も一般的なカプセル化の原則に違反することを意味するため、キーワードの使用を制限する必要があります。言語が厳しすぎると役に立たないコードが多すぎる可能性があるため、この使用法が役立つ場合がありますが、結びつきすぎて変更や保守が難しいものを作成しないように注意してください。内部フィールドまたはメソッドへのアクセスをクラスのオーバーライドに与えることは、多くの場合、実装の結合が多すぎる重い階層を持っていることを意味します(保守性のために階層よりも構成を優先します)。

アクセス制御修飾子なしで宣言された変数またはメソッドは、同じパッケージ内の他のクラスで使用できることに注意してください。私の意見では、これはパッケージのサブクラスによるアクセスを許可するよりも賢明です。

これが完全なグリッドです:

ここに画像の説明を入力してください

于 2012-09-13T07:06:32.300 に答える
0

Java APIドキュメントでは、キーワードアクセス指定子はSun.comによって提供されていません。この例を試してください

D:\>javac Demo.java
Demo.java:1: error: **modifier** private not allowed here
private class Test
        ^
1 error
于 2014-08-12T13:46:46.183 に答える