logo

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

  1. طرق مختلفة لزيادة التحميل على الطريقة
  2. عن طريق تغيير لا. من الحجج
  3. عن طريق تغيير نوع البيانات
  4. لماذا لا يمكن التحميل الزائد للطريقة عن طريق تغيير نوع الإرجاع
  5. هل يمكننا أن نفرط في الطريقة الرئيسية
  6. طريقة التحميل الزائد مع نوع الترويج

اذا كان فصل له طرق متعددة لها نفس الاسم ولكن تختلف في المعلمات، ومن المعروف باسم طريقة التحميل الزائد .

إذا كان علينا إجراء عملية واحدة فقط، فإن وجود نفس اسم الأساليب يزيد من إمكانية قراءة العملية برنامج .

.يساوي جافا

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

لذلك، نقوم بإجراء عملية التحميل الزائد لمعرفة البرنامج بسرعة.

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

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

طريقة التحميل الزائد يزيد من سهولة قراءة البرنامج .

طرق مختلفة لزيادة التحميل على الطريقة

هناك طريقتان لزيادة تحميل الطريقة في Java

  1. عن طريق تغيير عدد الحجج
  2. عن طريق تغيير نوع البيانات

في Java، لا يكون التحميل الزائد للأسلوب ممكنًا عن طريق تغيير نوع الإرجاع للأسلوب فقط.


1) طريقة التحميل الزائد: تغيير الرقم. من الحجج

في هذا المثال، قمنا بإنشاء طريقتين، الطريقة الأولى add() تقوم بإضافة رقمين والطريقة الثانية add تقوم بإضافة ثلاثة أرقام.

في هذا المثال، نقوم بإنشاء أساليب ثابتة لذلك لا نحتاج إلى إنشاء مثيل لطرق الاتصال.

 class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }} 
اختبره الآن

انتاج:

 22 33 


2) طريقة التحميل الزائد: تغيير نوع بيانات الوسائط

في هذا المثال، قمنا بإنشاء طريقتين تختلفان فيهما اختبره الآن

انتاج:

 22 24.9 

س) لماذا لا يمكن التحميل الزائد للطريقة عن طريق تغيير نوع الإرجاع للطريقة فقط؟

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

 class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }} 
اختبره الآن

انتاج:

 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); // هنا، كيف يمكن لجافا تحديد طريقة sum () التي يجب استدعاؤها؟

ملاحظة: خطأ وقت الترجمة أفضل من خطأ وقت التشغيل. لذا، فإن برنامج التحويل البرمجي Java يعرض خطأ وقت المحول البرمجي إذا أعلنت أن نفس الطريقة لها نفس المعلمات.

هل يمكننا زيادة تحميل طريقة Java main()؟

نعم، عن طريق التحميل الزائد. يمكنك الحصول على أي عدد من الطرق الرئيسية في الفصل الدراسي من خلال التحميل الزائد للطريقة. لكن JVM يستدعي الأسلوب main() الذي يستقبل مصفوفة السلسلة كوسيطات فقط. دعونا نرى المثال البسيط:

 class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} } 
اختبره الآن

انتاج:

 main with String[] 

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

تتم ترقية أحد الأنواع إلى نوع آخر ضمنيًا في حالة عدم العثور على نوع بيانات مطابق. دعونا نفهم المفهوم من خلال الشكل الموضح أدناه:

طريقة جافا التحميل الزائد مع نوع الترويج

كما هو موضح في الرسم البياني أعلاه، يمكن ترقية البايت إلى قصير، أو طويل، أو عائم، أو مزدوج. يمكن ترقية نوع البيانات القصيرة إلى int أو long أو float أو double. يمكن ترقية نوع البيانات char إلى int أو long أو float أو double وما إلى ذلك.

مثال على التحميل الزائد للطريقة باستخدام TypePromotion

 class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } } 
اختبره الآن
 Output:40 60 

مثال على التحميل الزائد للطريقة مع ترويج النوع في حالة العثور على التطابق

إذا كانت هناك وسائط نوع متطابقة في الطريقة، فلن يتم تنفيذ ترقية النوع.

 class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } } 
اختبره الآن
 Output:int arg method invoked 

مثال على التحميل الزائد للطريقة مع ترقية النوع في حالة الغموض

إذا لم تكن هناك وسيطات نوع متطابقة في الطريقة، وكل طريقة تروج لعدد مماثل من الوسائط، فسيكون هناك غموض.

ياسمين ديفيس عندما كانت طفلة
 class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } } 
اختبره الآن
 Output:Compile Time Error 

لا يتم إلغاء ترقية نوع واحد ضمنيًا، على سبيل المثال، لا يمكن إلغاء ترقية النوع المزدوج إلى أي نوع ضمنيًا.