Java 関数のアクセス修飾子とメソッドのオーバーライドの影響

王林
リリース: 2024-04-26 09:27:01
オリジナル
868 人が閲覧しました

サブクラスでオーバーライドされたメソッドのアクセス修飾子は、同じかそれより広くなければなりません。サブクラス メソッドのアクセス許可は、親クラス メソッドのアクセス許可よりも広くすることができます (たとえば、プロテクトからパブリックに変更)。サブクラス メソッドは、スーパークラス メソッドよりもアクセスを制限することはできません (たとえば、パブリックからプロテクトへ)。

Java 函数的访问权限修饰符之与方法重写的影响

Java 関数のアクセス修飾子とメソッドのオーバーライドの影響

アクセス修飾子は、Java メソッドのアクセシビリティを制御します。それらには 4 つのタイプがあります:

  • public: どこからでもアクセス可能
  • protected: 同じパッケージおよびサブクラス内でアクセス可能
  • default (明示的な修飾子なし): 同じパッケージ内でアクセス可能
  • private : クラス内でのみアクセス可能

親クラスのメソッドをオーバーライドする場合、子クラスのオーバーライドされたメソッドには、同じかそれより広いアクセス修飾子が必要です。これは、オーバーライドされたメソッドが親クラス メソッドに基づいているため、親クラス メソッドよりも制限を厳しくすることはできないためです。

実際のケース

以下は親クラスです:

public class Parent {
    protected void show() {
        System.out.println("Parent class show()");
    }
}
ログイン後にコピー

次に、親クラスの show() メソッドをオーバーライドする次のサブクラスについて考えてみましょう。 show() メソッドのアクセス修飾子が protected から public に変更されることに注意してください: show() 方法。注意 show() 方法的访问权限修饰符是从 protected 更改为 public

public class Child extends Parent {
    @Override
    public void show() {
        System.out.println("Child class show()");
    }
}
ログイン後にコピー

由于父类的 show() 方法是 protected 的,子类的 show() 方法也必须是 protectedpublic。将其设置为 public 符合方法重写的要求,因为它具有比父类方法更宽的访问权限。

运行这两个类将打印以下输出:

Child class show()
ログイン後にコピー

这是因为 Child 类中的重写方法被调用,因为它具有更宽的访问权限(publicrrreee

親クラスの によりshow( ) メソッドは protected であり、サブクラスの show() メソッドも protected または publicコード> >。これを <code>public に設定すると、親クラス メソッドよりも幅広いアクセス権があるため、メソッド オーバーライドとみなされます。 🎜🎜これら 2 つのクラスを実行すると、次の出力が出力されます: 🎜rrreee🎜これは、Child クラスのオーバーライドされたメソッドがより広いアクセス権 (public code>) を持っているため呼び出されるためです。 )。 🎜

以上がJava 関数のアクセス修飾子とメソッドのオーバーライドの影響の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!