1. メソッド呼び出しをメソッド本体に関連付けることを
2. コンパイル時バインディング (静的) は、プログラムのコンパイル段階で参照されるオブジェクトの型を決定します
3.実行中に参照されるオブジェクトの実際の型を判断し、その実際の型に従って対応するメソッドを呼び出すこと
4. 静的メソッドと最終メソッド (プライベート メソッドは最終メソッド) を除き、他のすべてのメソッドは遅延バインディングです。 Java のメソッドは動的バインディングによってポリモーフィックになります
5. 特定のフィールドにアクセスする動作はポリモーフィックではありません
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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());
}
}
|
ログイン後にコピー
出力結果:
1 2 | sup.field = 1, sup.getField() = 2
sub.field = 2, sub.getField() = 2, sub.getSuperField() = 1
|
ログイン後にコピー
SubField オブジェクトが Super に変換されると、参照されると、あらゆるフィールド アクセス操作が行われます。 SubField には、実際にはフィールドと呼ばれる 2 つのフィールドが含まれています。それ自体のフィールドと SuperField から継承されたフィールドです。通常、このフィールドはプライベートに設定されており、直接アクセスすることはできず、継承することもできず、呼び出しによってアクセスされます。メソッド
6. 静的メソッドへのアクセスはポリモーフィックではなく、単一のオブジェクトに関連付けられていません
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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());
}
}
|
ログイン後にコピー
出力結果:
1 2 | Super staticMethod()
Sub staticMethod()
|
ログイン後にコピー
以上がポリモーフィックを理解せずに Java のフィールドおよび静的メソッドにアクセスするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。