Javaでは、なぜできなスーパークラスのメソッドのアクセスを保護または民間の法/変数からのサブクラスのインスタンス?
-
23-08-2019 - |
質問
まずは別の挙動:場合でも宣言する方法/変数として個別のインスタンスと同じクラスが目にすることができます。大丈夫できるこうと思います。私はこれらのクラスとしないインスタンスです。
そこで問題部例えば、実行時にこういうことができるようにチェックすべての文字列変数 this
クラスがnullでない場合においてnullものが存在する場合がありますので文字列"NULL"です。
きの変数の反射とその値には使用できません。でも私にとりましてクラスを追加または民間でも保護され変数の私の基底クラスでのアクセスします。していま setAccessible
の変数まで使用できますか?
いについて、説明してほしいなぜあのようにベースのクラス(スーパークラスできませんのアクセス個/保護の変数からそのサブクラスです。ではそのサブクラスでいこうとしていた。どこ?
のを知っているスーパークラスを知らないかもしれないそのサブクラスが私の例でないもんです。
でんはいけない限り私の授業です。
更新: に基づきその答えを知りたいもの:なぜなアクセスを別のインスタンスのプライベート変数と同じクラスとされる違反の封止?
解決
でも違反の封止.別のクラスはできないなどをわかりやすく授業をやろなとい場合でも、一般化するクラスです。どのような車両のことは何も知らなかった車。全てのラスの基底クラスを提供するためのサブクラスが過保護には、親はいかが?提案を行うことができるのではない。
他のヒント
お答えし更新問題の質問にも答えて)の目的の個人が非表示の実施の詳細、その実施内容にならない依存関係.そしてこれからはオブジェクト指向プログラミング-封止を確保する複雑さを保って管理を別パーツで孤立した自。
この授業内容について知ってい独自の実装で定義されるものはありませんの獲得へのアクセスを制限するその他のインスタンスのクラスの実施を宣言し全てのインスタンスでは既にされます。
隠すこの場合も実際に複雑さを増しているの追加追加のアクセスレベルをクラスレベルは視認性の代わりにインスタンスレベルは視認性が本当に封止さ複雑になります。
すべて継承と封止.
Javaの視認性を規定する状態での
- 個人会員のみがアクセス可能で、クラスを定義して
- 保護員のみ可能でアクセス
- のクラスを定義して
- サブクラスのクラスを定義して
- その他のクラスと同じパッケージのクラスを定義して
もちろん、もちろんのこと、反射の変更ができますルールにない場合は、SecurityManagerを禁じま)
見ているとでから実践的な立場から:
public class Test1 {
private int a = 1;
public static void main(String s[]) {
System.out.println((new Test1()).a);
System.out.println((new Test1()).getA());
System.out.println((new Test2()).getA());
}
public int getA() { return a; }
}
class Test2 extends Test {
private int a = 2;
public int getA() { return a; }
}
どの書式を提案す Test1
めに使用される個人会員 a
に Test2
.時 Test1
書き Test2
ないものが存在します。
しかし、ベースのクラス(スーパークラス)で知らないときに受け継がれています。をベースクラスで知っていを受け継いできるのを修正ベースのクラスが継承します。まこっからの変更は私の地元のコピー ArrayList
私が書き:
class MyArrayList extends ArrayList
とうの日はどうしたらよろしいですか走っコード、コメントをいた変更のコピー ArrayList
その内容について知ってい MyArrayList
, やりたいの変更、コピーがパソコンか?
がこれらの課題を乗り越えるべきか?確かにその通りです。あな価値が可能です。なしその参加者をリーフへお連れします。