私はこのようなコードを持っていますが、エラーを出すことで保護されたメンバーにアクセスすることはできません。サブクラスでそのオブジェクトを作成すると、クラスのプロテクトメソッドにアクセスできないのはなぜですか?
**Class A
{
protected void m1()
{
some code
}
}
Class B:A
{
B b=new B();
b.m1();// Ok works fine
A a =new a();
a.m1();/// don't work, compile time error
A a2=new B();
a2.m1(); //compile time error, don't work
}**
は、ちょうどこの背後にある理由、上記のコード、サイドアウトアクセスすることはできません同じクラスのオブジェクトを使用して、クラスの理由方法のなぜそんなに異常な自然を得ていません。私はこれを少し探したが、アンダーサンドにしなかったが、コンパイラの性質が現れていることが分かったが、私は理解しなかった。
どのようにですか?あなたのクラスでa.m1()を呼び出すことは、Bコードからフォームを呼び出すこととの違いはありません。 "サブクラスからm1()を呼び出していますが、どこにアクセスできないのですか? – NoviceToDotNet
これは、プライベートやプロテクトなどのアクセス修飾子によって適用される保護レベルです。オブジェクトを介してメンバーへのアクセスが許可されていないことを意味します。そうでなければ、誰かがアクセス権を持っていればそのメンバーは公開されていますが、そのクラスのメソッドでそのメンバーにアクセスし、その子孫(保護されていないメンバーの場合は秘密ではない)は法律である –
だから、上記のコードでは、私はクラスCのクラスBのオブジェクトを作成し、クラスAの保護されたメソッドにアクセスしようとすると、その場合は、継承していないCと言う3番目のクラスがあると仮定します。アクセスできますか?そうでない場合はなぜですか? – NoviceToDotNet