مرکزی مواد پر جائیں
ماڈیول 2 · سبق 2 از 2کورس میں 4/14~12 min
ماڈیول اسباق (2/2)

طریقے اور اوور لوڈنگ

طریقے کسی چیز کے رویے کی وضاحت کرتے ہیں۔ ہم ان کے بارے میں ایک کلاس کے اندر اعلان کردہ فنکشن کے طور پر سوچ سکتے ہیں جو آبجیکٹ کے مثالی فیلڈز یا آنے والے پیرامیٹرز پر کام کرتے ہیں۔

ایک طریقہ کی تعریف

جاوا میں ایک طریقہ پر مشتمل ہے:

  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
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
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) طریقہ شامل کریں جو دو نمبروں کا مجموعہ لوٹاتا ہے۔ مرکزی طریقہ میں، اس طریقہ کو کیلک آبجیکٹ پر کال کریں اور نتیجہ ایک عدد متغیر کو تفویض کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

طریقہ کو `public int add(int a, int b) { واپس a + b کے طور پر قرار دیں؛ }` اور اسے مرکزی طریقہ میں بطور `int result = calc.add(5, 10);` کے طور پر استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m2.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

کیلکولیٹر کلاس میں ایک اور طریقہ بنا کر جو دو ڈبل پیرامیٹرز کو قبول کرتا ہے اور ان کی رقم واپس کرتا ہے اسے اوورلوڈ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

لکھیں `پبلک ڈبل ایڈ (ڈبل اے، ڈبل بی) { واپسی a + b؛ }` پہلے شامل کرنے کے طریقہ کے بالکل نیچے۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#java.m2.l2.e3
کوششیں: 0لوڈ ہو رہا ہے…

کیلکولیٹر کلاس میں ایک عوامی int multiply (int a, int b) طریقہ شامل کریں جو دو نمبروں کی پیداوار کو لوٹاتا ہے۔ مرکزی طریقہ میں، اس طریقہ کو کیلک آبجیکٹ پر کال کریں اور نتیجہ ایک عدد متغیر کو تفویض کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

طریقہ کو `عوامی انٹ ضرب (int a, int b) کے بطور قرار دیں { واپس a * b; }` اور اسے مرکزی طریقہ میں 'int result = calc.multiply(5, 10);` کے طور پر استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔