يتطلب تنفيذ برنامج Java خطوتين: التجميع والتنفيذ (التفسير) ، وجافا هي لغة برمجة موجهة نحو الكائن. عندما يكون للفئة الفرعية والفئة الأصل نفس الطريقة ، تتجاوز الفئة الفرعية طريقة الفئة الأصل. عندما يستدعي البرنامج الطريقة في وقت التشغيل ، سواء تم استدعاء طريقة الفئة الأصل أو تم تجاوز الفئة الفرعية ، يجب أن تكون هذه مشكلة نواجهها عندما نبدأ في تعلم Java. هنا نحدد أولاً طريقة تنفيذ أو عملية متغيرة لتحديد هذه المكالمة تسمى الربط.
هناك طريقتان ربطان في Java ، واحدة هي ملزمة ثابتة ، والمعروفة أيضًا باسم الربط المبكر. نوع آخر هو الربط الديناميكي ، والمعروف أيضًا باسم الربط المتأخر.
مفهوم ملزمة البرنامج:
يشير الربط إلى ارتباط استدعاء الطريقة مع الفصل (جسم الطريقة) حيث توجد الطريقة. بالنسبة إلى Java ، يتم تقسيم الربط إلى ربط ثابت وربط ديناميكي ؛ أو يسمى الربط المبكر والربط المتأخر.
الربط الثابت (ملزمة مترجم في وقت مبكر):
تم ربط الطريقة قبل تنفيذ البرنامج ويتم تنفيذها بواسطة برنامج التحويل البرمجي أو برنامج الاتصال الآخر. على سبيل المثال: C. بالنسبة إلى Java ، يمكن فهمه على أنه ملزم خلال فترة تجميع البرنامج ؛ على وجه التحديد ، الأساليب الوحيدة في جافا هي النهائيات والثابتة والخاصة والمنتدين الذين يتم ربطهم مسبقًا
الربط الديناميكي (الربط المتأخر أثناء وقت التشغيل):
الربط لاحقًا: يربط وفقًا لنوع الكائن المحدد في وقت التشغيل.
إذا كانت اللغة تنفذ الربط المتأخر ، فمن الضروري توفير بعض الآليات لتحديد نوع الكائن أثناء التشغيل واستدعاء الطرق المناسبة بشكل منفصل. بمعنى آخر ، لا يزال المترجم لا يعرف نوع الكائن في هذا الوقت ، ولكن يمكن أن تحقق آلية استدعاء الطريقة في حد ذاتها وإيجاد هيكل الطريقة الصحيحة. اللغات المختلفة لها طرق مختلفة لتنفيذ الربط المتأخر. يمكن الاعتقاد بأنهم جميعًا بحاجة إلى إدراج أنواع خاصة من المعلومات في الكائن.
عملية الربط الديناميكي:
ملخص حول الربط:
بعد فهم مفهوم الثلاثة ، وجدنا أن جافا تنتمي إلى الربط المتأخر. في Java ، تكون جميع الطرق تقريبًا ملزمة متأخرة ، وطرق الربط ديناميكيًا هي فئات فرعية أو فئات أساسية في وقت التشغيل. ولكن هناك أيضا ميزات خاصة. نظرًا لعدم وجود طرق ثابتة والأساليب النهائية ، يمكن تحديد قيمها في وقت الترجمة. انهم ينتمون إلى الربط المبكر. لكي تتم الإشارة بشكل خاص ، لا يمكن وراثة الأساليب والمتغيرات الأعضاء التي أعلنها القطاع الخاص بواسطة الفئات الفرعية ، ويتم تحديد جميع الأساليب الخاصة ضمنية على أنها نهائية (من هذا نعلم أن الطريقة التي تم الإعلان عنها كنوع نهائي هي منع الطريقة التي يتم بها الكتابة فوقها ، وإغلاق الربط الديناميكي بشكل فعال في Java). يتم تنفيذ ما بعد الارتباط في Java بواسطة JVM. لا نحتاج إلى إعلان ذلك صراحة ، لكن C ++ مختلف. يجب أن نعلن صراحة أن الطريقة لديها ما بعد الارتباط. يتم تحقيق التحول الصاعد أو تعدد الأشكال في Java من خلال الربط الديناميكي ، وبالتالي فإن فهم الربط الديناميكي يعني التحول التصاعدي وتعدد الأشكال.
بالنسبة للطرق في Java ، باستثناء النهائي ، الثابتة ، الخاصة والمنشآت التي هي ملزمة مبكرة ، فإن جميع الطرق الأخرى ملزمة ديناميكية. يحدث الربط الديناميكي النموذجي بموجب إعلان تحويل الفئة الأم وفئة الطفل:
على سبيل المثال: الوالد p = الأطفال الجدد () ؛
العملية المحددة هي كما يلي:
1. يتحقق المترجم من نوع الإعلان واسم طريقة الكائن. لنفترض أننا نسمي طريقة XF (args) وقد تم الإعلان عن X ككائن للفئة C ، فإن المترجم سوف يسرد جميع الطرق المسمى F في الفئة C والأساليب الموروثة من الطبقة الفائقة من الفئة C.
2. التالي ، يتحقق المترجم لأنواع المعلمات المقدمة في استدعاء الطريقة. إذا كان نوع المعلمة واحد بين جميع الطرق مع الاسم F يطابق نوع المعلمة المقدمة من المكالمة أكثر ، فسيتم استدعاء هذه الطريقة. وتسمى هذه العملية "التحليل الزائد"
3. عندما يقوم البرنامج بتشغيل ويستخدم الربط الديناميكي لطرق الاتصال ، يجب على الجهاز الظاهري استدعاء إصدار الطريقة الذي يطابق النوع الفعلي للكائن المشار إليه بواسطة x. على افتراض أن النوع الفعلي هو D (فئة فرعية من C) ، إذا تم تعريف الفئة D F (سلسلة) ، فسيتم استدعاء الطريقة ، وإلا فإن الطريقة F (السلسلة) سيتم البحث فيها في الفئة الخارقة لـ D ، وهكذا.
أفكار السؤال:
كيفية توفير طريقة مستخدم طريقة لإكمال المهمة. إذا كان لدى المستخدم متطلبات خاصة ، فهو بحاجة إلى تخصيص طريقته الخاصة؟
المعرفة المعنية:
فئة من الوالدين والولادة والواجهة والتحول التصاعدي والربط الديناميكي
رمز محدد:
package com.chengxuyuanzhilu ؛ الواجهة العامة myInterfaces {void doting () ؛} package com.chengxuyuanzhilu ؛ يشرب مشروب الطبقة العامة myinterfaces {Override public void doting () {system.out.println ("أنا أشرب المياه") ؛ }} package com.chengxuyuanzhilu ؛ class public eat تنفذ myInterfaces {Override public void doting () {system.out.println ("أنا الأكل") ؛ }} package com.chengxuyuanzhilu ؛ public class run تنفذ myInterfaces {Override public void doting () {system.out.println ("im rem") ؛ }} package com.chengxuyuanzhilu ؛ public class testDynamicBind {public static void main (string [] args) {myInterfaces my = null ؛ بلدي = جديد EAT () ؛ ربط (بلدي) ؛ مشروب بلدي الجديد () ؛ ربط (بلدي) ؛ my = new Run () ؛ ربط (بلدي) ؛ } static void bind (myInterfaces my) {my.doting () ؛ }}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.