ホームページ > Java > &#&チュートリアル > Java 動的バインディング メカニズムを実装する方法

Java 動的バインディング メカニズムを実装する方法

PHPz
リリース: 2023-04-18 17:10:03
転載
1106 人が閲覧しました

1. 動的バインディングのプロセス:

例:

public class Son extends Father  Son son = new Son();3 son.method();
ログイン後にコピー

1. まず、コンパイラは、宣言された型とメソッドに基づいて、対応するクラスを検索します。オブジェクト (Son) の名前とその親クラス (Father) の「メソッド テーブル」から、アクセス属性が public であるすべてのメソッド メソッドを検索します。

method という名前のメソッドが複数存在する場合がありますが、パラメータの型や数が異なります。

2. 次に、メソッドの「シグネチャ」に基づいて完全に一致するメソッドを見つけます。

メソッドの名前とパラメーターのリストは、メソッドのシグネチャと呼ばれます。

Java SE 5.0 より前のバージョンでは、親クラスのメソッドをオーバーライドする場合、戻り値の型は同じである必要があります。サブクラスがスーパークラス メソッドをオーバーライドする場合、その戻り値の型を元の型のサブタイプとして定義できるようになりました。

public Father getFather(){...} //父类中的方法  public Son getFather(){...} //子类覆盖父类中的getFather()方法
ログイン後にコピー

3.プライベート、静的、最終メソッドまたはコンストラクターの場合、コンパイラはどのメソッドを呼び出すべきかを明確に認識しており、この呼び出しメソッドは「静的呼び出し」と呼ばれます。

4. メソッドを呼び出します。

method() メソッドがサブクラス Son で定義されている場合、サブクラス内の対応するメソッドが直接呼び出されます。対応するメソッドがサブクラス Son に定義されていない場合、method() はそのサブクラス内で見つかります。親クラスのメソッド。

2. デモ

1. サブクラスは親クラスのメソッドをオーバーライドし、サブクラスのメソッドを呼び出します

public class Father{      public void method(){          System.out.println("父类方法:"+this.getClass());    }  }  public class Son extends Father{      public void method(){          System.out.println("子类方法"+this.getClass());  }  public static void main(String[] args){      Father instance = new Son();      instance.method();      }  }  //结果:子类方法:class Son
ログイン後にコピー

2. サブクラスは次のとおりです。親クラスのメソッドをオーバーライドすることはできないため、親クラスに移動して対応するメソッドを見つけます

public class Father{      public void method(){          System.out.println("父类方法:"+this.getClass());      }  }  public class Son extends Father{      public static void main(String[] args){          Father instance = new Son();          instance.method();       }  }  //结果:父类方法:class Son
ログイン後にコピー

3. 動的バインディングはオブジェクトのみのメソッドであり、属性には無効です。プロパティをオーバーライドできないためです。

うわー

以上がJava 動的バインディング メカニズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート