ماڈیول اسباق (2/2)
طریقے اور اوور لوڈنگ
طریقے کسی چیز کے رویے کی وضاحت کرتے ہیں۔ ہم ان کے بارے میں ایک کلاس کے اندر اعلان کردہ فنکشن کے طور پر سوچ سکتے ہیں جو آبجیکٹ کے مثالی فیلڈز یا آنے والے پیرامیٹرز پر کام کرتے ہیں۔
ایک طریقہ کی تعریف
جاوا میں ایک طریقہ پر مشتمل ہے:
- ایکسیس موڈیفائر (جیسے،
public,private)۔ - واپسی کی قسم (مثال کے طور پر،
int،String، یاvoidاگر یہ کچھ واپس نہیں کرتا ہے)۔ camelCaseمیں طریقہ کا نام۔- پیرامیٹر قوسین میں بند ہیں۔
- میتھڈ باڈی گھوبگھرالی منحنی خطوط وحدانی میں بند ہے۔
class Person {
String name;
public Person(String name) {
this.name = name;
}
// Method with return type String
public String greet() {
return "Ciao, mi chiamo " + name;
}
}کال کرنے کا طریقہ
تخلیق شدہ آبجیکٹ پر طریقہ استعمال کرنے کے لیے، ہم ڈاٹ نوٹیشن کا استعمال کرتے ہیں .:
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);
}
}طریقہ اوورلوڈنگ
جاوا میں، ایک ہی کلاس میں دو یا زیادہ طریقوں کا ایک ہی نام ہوسکتا ہے، جب تک کہ ان کے پاس مختلف پیرامیٹر کی فہرست ہو (تعداد، ترتیب، یا پیرامیٹرز کی اقسام میں)۔ یہ تصور اوور لوڈنگ کے نام سے جانا جاتا ہے۔
کمپائلر کال کے دوران گزرے دلائل کا تجزیہ کرکے فیصلہ کرتا ہے کہ کون سا طریقہ استعمال کرنا ہے۔
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);
}
}قدر سے گزرنے والا پیرامیٹر
جاوا میں، تمام پیرامیٹرز کو بذریعہ قدر (پاس بہ قدر) پاس کیا جاتا ہے۔ اس کا مطلب یہ ہے کہ جب آپ کسی طریقہ کو دلیل دیتے ہیں تو جاوا متغیر کی قدر کی ایک کاپی بناتا ہے اور اسے طریقہ میں منتقل کرتا ہے۔
- آدمی اقسام کے لیے، طریقہ سے باہر کی اصل قدر کبھی نہیں بدلتی، چاہے طریقہ کے اندر ترمیم کی جائے۔
- آبجیکٹ/حوالہ جات کے لیے، آبجیکٹ کا حوالہ نقل کیا جاتا ہے۔ اس کا مطلب یہ ہے کہ اگرچہ ہم میموری ایڈریس کو تبدیل نہیں کر سکتے جس کی طرف اصل آبجیکٹ کی طرف اشارہ کیا گیا ہے، ہم اس کی اندرونی حالت (جیسے اس کے فیلڈز) میں ترمیم کر سکتے ہیں اور وہ تبدیلیاں باہر نظر آئیں گی۔
اوور لوڈنگ کی حدود: واپسی کی قسم
یہ نوٹ کرنا ضروری ہے کہ آپ مکمل طور پر واپسی کی قسم پر مبنی طریقہ کو اوورلوڈ نہیں کر سکتے۔ مثال کے طور پر، درج ذیل کوڈ تالیف کی خرابی کا سبب بنے گا۔
class Example {
// ERROR: The signature of the two methods is considered identical
public int getNumber() { return 42; }
public double getNumber() { return 42.0; }
}کمپائلر کو صرف پیرامیٹرز کی بنیاد پر طریقوں کے درمیان فرق کرنے کی ضرورت ہوتی ہے تاکہ یہ فیصلہ کیا جا سکے کہ کمپائل ٹائم پر کون سا ورژن کال کرنا ہے (کمپائل ٹائم پر اوور لوڈنگ کو حل کیا جاتا ہے)۔
خود ہی آزمائیں۔
کیلکولیٹر کلاس میں ایک عوامی int add(int a, int b) طریقہ شامل کریں جو دو نمبروں کا مجموعہ لوٹاتا ہے۔ مرکزی طریقہ میں، اس طریقہ کو کیلک آبجیکٹ پر کال کریں اور نتیجہ ایک عدد متغیر کو تفویض کریں۔
اشارہ دکھائیں۔
طریقہ کو `public int add(int a, int b) { واپس a + b کے طور پر قرار دیں؛ }` اور اسے مرکزی طریقہ میں بطور `int result = calc.add(5, 10);` کے طور پر استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔
کیلکولیٹر کلاس میں ایک اور طریقہ بنا کر جو دو ڈبل پیرامیٹرز کو قبول کرتا ہے اور ان کی رقم واپس کرتا ہے اسے اوورلوڈ کریں۔
اشارہ دکھائیں۔
لکھیں `پبلک ڈبل ایڈ (ڈبل اے، ڈبل بی) { واپسی a + b؛ }` پہلے شامل کرنے کے طریقہ کے بالکل نیچے۔
3 کوششوں کے بعد حل دستیاب ہے۔
کیلکولیٹر کلاس میں ایک عوامی int multiply (int a, int b) طریقہ شامل کریں جو دو نمبروں کی پیداوار کو لوٹاتا ہے۔ مرکزی طریقہ میں، اس طریقہ کو کیلک آبجیکٹ پر کال کریں اور نتیجہ ایک عدد متغیر کو تفویض کریں۔
اشارہ دکھائیں۔
طریقہ کو `عوامی انٹ ضرب (int a, int b) کے بطور قرار دیں { واپس a * b; }` اور اسے مرکزی طریقہ میں 'int result = calc.multiply(5, 10);` کے طور پر استعمال کریں۔
3 کوششوں کے بعد حل دستیاب ہے۔