الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 2 من 24/14 في الدورة~12 min
دروس الوحدة (2/2)

الأساليب والتحميل الزائد

تحدد الأساليب سلوك الكائن. يمكننا اعتبارها وظائف معلنة داخل فئة تعمل على حقول مثيل الكائن أو المعلمات الواردة.

تحديد الطريقة

تتكون الطريقة في Java من:

  1. مُعدِّل الوصول (على سبيل المثال، public، private).
  2. نوع الإرجاع (على سبيل المثال، int، أو String، أو void إذا لم يُرجع أي شيء).
  3. اسم الطريقة في camelCase.
  4. المعلمات بين قوسين.
  5. نص الطريقة محاط بأقواس متعرجة.
Java
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }

    // Method with return type String
    public String greet() {
        return "Ciao, mi chiamo " + name;
    }
}

استدعاء طريقة

لاستدعاء عملية على كائن تم إنشاؤه، نستخدم النقطة .:

Java
public class Main {
    public static void main(String[] args) {
        Person p = new Person("Marco");
        String message = p.greet(); // Calling the method
        System.out.println(message);
    }
}

طريقة التحميل الزائد

في Java، يمكن أن يكون لطريقتين أو أكثر داخل نفس الفئة نفس الاسم، طالما أن لديهم قائمة معلمات مختلفة (من حيث العدد أو الترتيب أو أنواع المعلمات). يُعرف هذا المفهوم باسم التحميل الزائد.

يقرر المترجم الطريقة التي سيتم استدعاؤها من خلال تحليل الوسائط التي تم تمريرها أثناء المكالمة.

Java
class Printer {
    // Method to print an integer
    public void printValue(int number) {
        System.out.println("Intero: " + number);
    }

    // Overloaded method to print a string
    public void printValue(String text) {
        System.out.println("Testo: " + text);
    }
}

تمرير المعلمة حسب القيمة

في Java، يتم تمرير كافة المعلمات حسب القيمة (تمرير حسب القيمة). هذا يعني أنه عند تمرير وسيطة إلى طريقة ما، تقوم Java بإنشاء نسخة من قيمة المتغير وتمريرها إلى الطريقة.

  • بالنسبة إلى الأنواع البدائية، لا تتغير القيمة الأصلية خارج الطريقة أبدًا، حتى لو تم تعديلها داخل الطريقة.
  • بالنسبة إلى الكائنات/المراجع، يتم نسخ المرجع إلى الكائن. هذا يعني أنه بينما لا يمكننا تغيير عنوان الذاكرة الذي يشير إليه الكائن الأصلي، يمكننا تعديل حالته الداخلية (على سبيل المثال، حقوله) وستكون هذه التغييرات مرئية في الخارج.

قيود التحميل الزائد: نوع الإرجاع

من المهم ملاحظة أنه لا يمكنك التحميل الزائد لطريقة تعتمد فقط على نوع الإرجاع. على سبيل المثال، الكود التالي سوف يسبب خطأ في الترجمة:

Java
class Example {
    // ERROR: The signature of the two methods is considered identical
    public int getNumber() { return 42; }
    public double getNumber() { return 42.0; }
}

يحتاج المترجم إلى التمييز بين الأساليب المستندة فقط إلى المعلمات لتحديد الإصدار الذي سيتم استدعاؤه في وقت الترجمة (يتم حل التحميل الزائد في وقت الترجمة).


جربه بنفسك

تمرين#java.m2.l2.e1
المحاولات: 0جارٍ التحميل…

أضف طريقة int add(int a, int b) العامة إلى فئة الحاسبة التي ترجع مجموع الرقمين. في الطريقة الرئيسية، قم باستدعاء هذه الطريقة على كائن calc وقم بتعيين النتيجة إلى متغير صحيح.

جارٍ تحميل المحرر…
إظهار التلميح

قم بتعريف الطريقة كـ `public int add(int a, int b) { return a + b; }` واستدعائه في الطريقة الرئيسية كـ `int result = calc.add(5, 10);`.

الحل متاح بعد 3 من المحاولات

تمرين#java.m2.l2.e2
المحاولات: 0جارٍ التحميل…

قم بتحميل طريقة الإضافة في فئة الحاسبة عن طريق إنشاء طريقة أخرى تقبل معلمتين مزدوجتين وترجع مجموعهما.

جارٍ تحميل المحرر…
إظهار التلميح

اكتب `إضافة مزدوجة عامة (double a، double b) { return a + b; }` مباشرة أسفل طريقة الإضافة الأولى.

الحل متاح بعد 3 من المحاولات

تمرين#java.m2.l2.e3
المحاولات: 0جارٍ التحميل…

أضف طريقة int multiply(int a, int b) العامة إلى فئة الحاسبة التي تُرجع حاصل ضرب الرقمين. في الطريقة الرئيسية، قم باستدعاء هذه الطريقة على كائن calc وقم بتعيين النتيجة إلى متغير صحيح.

جارٍ تحميل المحرر…
إظهار التلميح

قم بتعريف الطريقة كـ `public int multiply(int a, int b) { return a * b; }` واستدعائه في الطريقة الرئيسية كـ `int result = calc.multiply(5, 10);`.

الحل متاح بعد 3 من المحاولات