サブクラスでオーバーライドされたメソッドのアクセス修飾子は、同じかそれより広くなければなりません。サブクラス メソッドのアクセス許可は、親クラス メソッドのアクセス許可よりも広くすることができます (たとえば、プロテクトからパブリックに変更)。サブクラス メソッドは、スーパークラス メソッドよりもアクセスを制限することはできません (たとえば、パブリックからプロテクトへ)。
Java 関数のアクセス修飾子とメソッドのオーバーライドの影響
アクセス修飾子は、Java メソッドのアクセシビリティを制御します。それらには 4 つのタイプがあります:
親クラスのメソッドをオーバーライドする場合、子クラスのオーバーライドされたメソッドには、同じかそれより広いアクセス修飾子が必要です。これは、オーバーライドされたメソッドが親クラス メソッドに基づいているため、親クラス メソッドよりも制限を厳しくすることはできないためです。
実際のケース
以下は親クラスです:
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()
方法也必须是 protected
或 public
。将其设置为 public
符合方法重写的要求,因为它具有比父类方法更宽的访问权限。
运行这两个类将打印以下输出:
Child class show()
这是因为 Child
类中的重写方法被调用,因为它具有更宽的访问权限(public
rrreee
によりshow( )
メソッドは protected
であり、サブクラスの show()
メソッドも protected
または publicコード> >。これを <code>public
に設定すると、親クラス メソッドよりも幅広いアクセス権があるため、メソッド オーバーライドとみなされます。 🎜🎜これら 2 つのクラスを実行すると、次の出力が出力されます: 🎜rrreee🎜これは、Child
クラスのオーバーライドされたメソッドがより広いアクセス権 (public
code>) を持っているため呼び出されるためです。 )。 🎜以上がJava 関数のアクセス修飾子とメソッドのオーバーライドの影響の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。