في Java، التحميل الزائد للطرق ميزة تسمح للصنف بأن يحتوي على أكثر من طريقة تحمل الاسم نفسه، إذا اختلفت قوائم معاملاتها. وهو مرتبط بتعدد الأشكال في وقت الترجمة (أو الساكن). هذا المفهوم جوهري لإنشاء طرق تؤدي مهامًا متشابهة لكن بمدخلات مختلفة.
التحميل الزائد للطرق يزيد من سهولة قراءة البرنامج. يمكن إعطاء طرق مختلفة الاسم نفسه لكن بمعاملات مختلفة. وحسب عدد المعاملات أو أنواعها، تُستدعى الطريقة المناسبة.
مفتاح التحميل الزائد للطرق هو توقيع الطريقة. تُعدّ الطريقتان مختلفتين إذا اختلف توقيعهما. وهناك أسلوبان لتحميل الطرق تحميلًا زائدًا:
عدد مختلف من المعاملات: يمكن أن تحمل الطرق الاسم نفسه لكن بعدد مختلف من المعاملات.
public class Display {
public void show(int x) {
System.out.println("Show with int: " + x);
}
public void show(int x, int y) {
System.out.println("Show with two ints: " + x + ", " + y);
}
}
أنواع مختلفة من المعاملات: يمكن أن تحمل الطرق الاسم نفسه والعدد نفسه من المعاملات لكن بأنواع مختلفة.
public class Display {
public void show(int x) {
System.out.println("Show with int: " + x);
}
public void show(String s) {
System.out.println("Show with String: " + s);
}
}
في هذا المفهوم، سنستكشف أمثلة وفروقًا دقيقة متعددة للتحميل الزائد للطرق في Java.
في هذا التمرين، تلعب مع أفضل أصدقائك لعبة تقمّص أدوار تُدعى "Wizard and Warriors". أنت سيد اللعبة، أي الشخص المسؤول عن إحياء عالم اللعبة للاعبين. ومن الجوانب الأساسية في ذلك وصف اللعبة للاعبين: ما حالة الشخصية، وكيف تبدو البلدة التي يزورونها، وما إلى ذلك.
لديك خمس مهام تطلب منك وصف أجزاء من اللعبة للاعبين.
لكل شخصية صنف ومستوى وعدد من نقاط الصحة، وتوصف كما يلي: "You're a level <LEVEL> <CLASS> with <HIT_POINTS> hit points.".
نفّذ الطريقة GameMaster.describe التي تأخذ Character كمعاملها الوحيد وتُرجع وصفه.
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
new GameMaster().describe(character);
// => "You're a level 4 Wizard with 28 hit points."
لكل وجهة اسم وعدد من السكان، وتوصف كما يلي: "You've arrived at <NAME>, which has <INHABITANTS> inhabitants.".
نفّذ الطريقة GameMaster.describe التي تأخذ Destination كمعاملها الوحيد وتُرجع وصفها.
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(destination);
// => "You've arrived at Muros, which has 732 inhabitants."
يمكن للشخصيات السفر إلى وجهة باستخدام أحد خيارين:
"You're traveling to your destination by walking."
"You're traveling to your destination on horseback."
نفّذ الطريقة GameMaster.describe التي تأخذ TravelMethod كمعاملها الوحيد وتُرجع وصفها.
new GameMaster().describe(TravelMethod.HORSEBACK);
// => "You're traveling to your destination on horseback."
عندما تسافر شخصية إلى وجهة، يُوصف ذلك بأنه مزيج من الأوصاف الفردية: "<CHARACTER> <TRAVEL_METHOD> <DESTINATION>".
نفّذ الطريقة GameMaster.describe التي تأخذ Character وDestination وTravelMethod كمعاملاتها وتُرجع وصفها.
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(character, destination, TravelMethod.HORSEBACK);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination on horseback. You've arrived at Muros, which has 732 inhabitants."
في معظم الحالات، تسافر الشخصيات إلى وجهة سيرًا على الأقدام.
وللتسهيل، يُسمح للاعبين بحذف ذكر كيفية السفر، وفي هذه الحالة يُفترض أن السفر سيرًا على الأقدام.
نفّذ الطريقة GameMaster.describe التي تأخذ Character وDestination كمعاملاتها وتُرجع وصفها.
Character character = new Character();
character.setCharacterClass("Wizard");
character.setLevel(4);
character.setHitPoints(28);
Destination destination = new Destination();
destination.setName("Muros");
destination.setInhabitants(732);
new GameMaster().describe(character, destination);
// => "You're a level 4 Wizard with 28 hit points. You're traveling to your destination by walking. You've arrived at Muros, which has 732 inhabitants."
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.