Java には見落とされやすい問題があります。それは、継承されたクラスの権限と基本クラスの権限との関係です。継承されたクラスを使用する場合、基本クラスのアクセス制御文字を変更する必要はほとんどありませんが、基本クラスのアクセス制御文字を直接使用するためです。
基本クラスにプライベートな属性メソッドがある場合、サブクラスを保護されたものに変更できますか?保護された場合、サブクラスをパブリックまたはプライベートに変更できますか?次にこの問題を見てみましょう。
関連ビデオチュートリアルの推奨事項: Java 教育ビデオ
1. 基本クラスのメソッドはプライベートです
まず、基本クラス 属性メソッドはプライベートなので、サブクラスを保護またはパブリックに変更できますか?答えは「いいえ」です。この答えは少し推論すれば結論づけることができます。基本クラスの属性メソッドはプライベートであるため、サブクラスからは見えません。サブクラスは見えないので、どのようにして基本クラス メソッドのアクセス許可を設定できるでしょうか。制御記号はどうなりますか?
コードの一部を使用して、この問題を確認できます:
/*BaseClass.java*/ public class BaseClass { private void test() {} } /*ExtendClass.java*/ public class ExtendClass extends BaseClass { //@Override protected void test() {} }
注釈が上記のコードから削除されると、メソッドが見つからないことを示すエラーが報告されます。基底クラスのメソッドは private なのでアノテーションを外せば問題ありませんが、この時点ではサブクラスの test() メソッドと基底クラスの test() メソッドは全く関係のないメソッドです。
2. 基本クラスのメソッドはフレンドリーです
基本クラスのメソッドがフレンドリーである場合 (デフォルトの権限)、状況は 2 つあり、1 つは子です。クラスと基本クラスが同じパッケージ内にある場合 1 つは、サブクラスと基本クラスが同じパッケージ内にない場合です。サブクラスと基本クラスが同じパッケージ内にある場合、アクセス許可制御シンボルを protected または public に展開できます。
/*BaseClass.java*/ package demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo1; public class ExtendClass extends BaseClass { @Override protected void test() {} }
上記の 2 つのクラスはパッケージ Demon1 の下にあり、コードは正しく使用できます。ただし、サブクラスと基本クラスが同じパッケージ内にない場合は、状況が異なります:
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { //@Override protected void test() {} }
サブクラスと基本クラスが同じパッケージ内にない場合、デフォルトのアクセス許可は拡張できません。理由は実際にはプライベートと同じであり、クラスは基本クラスのメソッドを認識できないため、メソッドのアクセス許可を拡張できません。
3. 基本クラスのメソッドは保護されています
基本クラスのメソッドが保護されている場合、サブクラスはアクセス制御文字をパブリックに拡張できます:
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { protected void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { @Override public void test() {} }
4. 概要
実際、拡張の状況を把握するのは簡単です。次のガイドラインを覚えておいてください: 理論的には、サブクラスは基本クラスを拡張できるアクセス制御文字です。 , ただし、基本クラスのアクセス制御文字は絞り込むことができず、サブクラスが基本クラスのメソッドを参照できる場合にのみ拡張できます。
関連するチュートリアルをさらに学習したい場合は、Java ゼロベースの概要
にアクセスしてください。以上がJava の継承クラスの権限の問題についての詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。