以下のエディターは、Java のフィールドと静的メソッドへのアクセスにはポリモーフィズムがないという事実に基づいた記事を提供します (例による説明)。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう
1. メソッド呼び出しをメソッド本体に関連付けることが呼び出されます
2. プログラムのコンパイル段階で参照されるオブジェクトの型を決定します
3。バインディング(動的バインディング)とは、実行中に参照されるオブジェクトの実際の型を決定し、その実際の型に従って対応するメソッドを呼び出すことを指します
4。静的メソッドと最終メソッド(プライベートメソッドは最終メソッドです)。他のメソッドは遅延バインディングであり、Java のすべてのメソッドは動的バインディングを通じてポリモーフィズムを実現します
5. 特定のドメインにアクセスする動作はポリモーフィックではありません
package polymorphism; class SuperField { public int field = 1; public int getField() { return field; } } class SubField extends SuperField { public int field = 2; public int getField() { return field; } public int getSuperField() { return super.field; } } public class FieldPolymorphism { public static void main(String[] args) { SuperField sup = new SubField(); System.out.println("sup.field = " + sup.field + ", sup.getField() = " + sup.getField()); SubField sub = new SubField(); System.out.println("sub.field = " + sub.field + ", sub.getField() = " + sub.getField() + ", sub.getSuperField() = " + sub.getSuperField()); } }
出力結果:
sup.field = 1, sup. getField() = 2
sub.field = 2、sub.getField() = 2、sub.getSuperField() = 1
SubField オブジェクトがスーパー参照に変換されると、フィールドの Access 操作はすべてコンパイラによって解析されます。 SubField には、実際にはフィールドと呼ばれる 2 つのフィールドが含まれています。フィールドは独自のものであり、SuperField から継承されます。通常、このフィールドはプライベートに設定されており、メソッドを呼び出すことでアクセスできます
6。 static メソッドはポリモーフィックではなく、単一のオブジェクトに関連付けられていません
package polymorphism; class Super { public static String staticMethod() { return "Super staticMethod()"; } } class Sub extends Super { public static String staticMethod() { return "Sub staticMethod()"; } } public class StaticPolymorphism { public static void main(String[] args) { Super sup = new Sub(); System.out.println(sup.staticMethod()); System.out.println(Sub.staticMethod()); } }
Super staticMethod()
Sub staticMethod()以上がJava におけるポリモーフィズムを伴わないフィールドおよび静的メソッドへのアクセスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。