まず、次の 2 つの例を見てみましょう:
例 1:
//包A中有一个动物类 package testa; public class Animal { protected void crowl(String c){ System.out.println(c); } }
(ビデオ チュートリアルの推奨事項: java ビデオ)
例 2:
package testb; import testa.Animal; class Cat extends Animal { } public class Rat extends Animal{ public void crowl(){ this.crowl("zhi zhi"); //没有问题,继承了Animal中的protected方法——crowl(String) Animal ani=new Animal(); ani.crowl("animail jiaojiao"); //wrong, The method crowl(String) from the type Animal is not visible Cat cat=new Cat(); cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible } }
猫とマウスは両方とも動物クラスを継承するため、マウス クラスのスコープ内では、次の継承が行われます。猫は見えません crow() メソッドはどうでしょうか?
質問の回答:
protected アクセス保護ルールは非常に微妙です。ただし、保護されたドメインはすべてのサブクラスに表示されます。しかし、非常に重要なことが 1 つあります。 が異なるパッケージ内にある場合、 サブクラスは、独自のスコープ内で継承する親クラスの保護されたドメインにのみアクセスできますが、他のサブクラスにはアクセスできません (同じものを持つ)親) クラスの実の兄弟によって継承された保護ドメイン) と親クラス オブジェクトの保護ドメイン ani.crow1()。 率直に言うと、ネズミは「ジー、ジー」としか鳴きません。たとえ猫が見えたとしても(自分のスコープ内に猫オブジェクトを作成できる)、彼は決して鳴くことを学ぶことはありません。
つまり、cat によって継承された crowl メソッドは、cat クラスのスコープ内で参照できます。しかし、たとえネズミと猫が兄弟であっても、ネズミクラスの範囲内ではそれは見えません。
さらに: clone メソッドを使用する場合、オブジェクト aObject.clone() を単純に直接複製できないのはこのためです。 aObject.bObject=(Bobject)this.bObject.clone();
概要:
B が A を拡張する場合、サブクラス B のスコープ内で、保護されたクラスのみを呼び出します。このサブクラス B で定義されたオブジェクトのメソッド (このメソッドは親クラス A から継承されます)。クラス A の他のオブジェクト (A 自体および A から継承されたオブジェクト) の保護されたメソッドを呼び出すことはできません。
推奨チュートリアル: java エントリー プログラム
以上がJavaの保護されたキーワードの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。