logo

هل يمكننا تجاوز الطريقة الثابتة في Java؟

في جافا، تجاوز و الحمولة الزائدة هما أهم سمات البرمجة الشيئية . يتم استخدام الميزة عندما يريد المبرمج تحقيقها تعدد الأشكال . السؤال، هل يمكننا تجاوز الطريقة الثابتة في Java أو هل يمكنك زيادة تحميل الطريقة الثابتة في Java هما السؤالان الأكثر أهمية المطروحة في مقابلة جافا . في هذا القسم، سوف نفهم التحميل الزائد والتجاوز باختصار. وقد أوضحنا أيضًا إجابة لماذا لا يمكننا تجاوز الطريقة الثابتة في Java؟

الطريقة الثابتة

تُعرف الطريقة التي تحتوي على كلمة أساسية ثابتة قبل اسم الطريقة باسم a طريقة ثابتة . ومن المعروف أيضا باسم أ طريقة على مستوى الفصل . تتم مشاركة نسخة من الطريقة الثابتة بواسطة كافة كائنات الفئة.

 public static int sum() { } 

يمكننا استدعاء الأساليب الثابتة باستخدام اسم الفئة. على سبيل المثال، Math.abs(أ) طريقة . تقوم الطريقة بإرجاع القيمة المطلقة للوسيطة التي تم تمريرها. لا يمكن للطريقة الثابتة الوصول إلى متغيرات المثيل أو الأساليب.

تجاوز الأسلوب

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

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

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

لقد تعلمنا ما هو التحميل الزائد والتجاوز. الآن ننتقل إلى هذه النقطة.

هل يمكننا زيادة التحميل على طريقة ثابتة؟

الجواب هو نعم . يمكننا أن نثقل كاهل الأساليب الثابتة. لكن تذكر أن توقيع الطريقة يجب أن يكون مختلفًا. على سبيل المثال، فكر في برنامج Java التالي.

OverloadStaticMethodExample1.java

 public class OverloadStaticMethodExample1 { //static method public static void display() { System.out.println('Static method called.'); } //overloaded static method public static void display(int x) { System.out.println('An overloaded static method called.'); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample1.display(); OverloadStaticMethodExample1.display(160); } } 

انتاج:

 Static method called. An overloaded static method called. 

وهنا يطرح سؤال ذلك هل يمكننا زيادة تحميل الأساليب إذا كانت مختلفة فقط عن طريق الكلمة الأساسية الثابتة.

الجواب هو لا. لا يمكننا تجاوز طريقتين إذا كانتا تختلفان فقط بكلمة رئيسية ثابتة. على سبيل المثال، فكر في برنامج Java التالي.

OverloadStaticMethodExample2.java

 public class OverloadStaticMethodExample2 { //static method public static void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //non-static method public void sum(int a, int b) { int c=a+b; System.out.println('The sum is: '+c); } //main method public static void main(String args[]) { //calling static method by using the class name OverloadStaticMethodExample2.sum(12, 90); } } 

عندما نقوم بتجميع البرنامج أعلاه، فإنه يظهر الخطأ التالي.

 error: method sum(int,int) is already defined in class OverloadStaticMethodExample2 

هل يمكننا تجاوز طريقة ثابتة؟

لا، لا يمكننا تجاوز الطرق الثابتة لأن تجاوز الطريقة يعتمد على الارتباط الديناميكي في وقت التشغيل ويتم ربط الطرق الثابتة باستخدام الربط الثابت في وقت الترجمة. لذلك، لا يمكننا تجاوز الأساليب الثابتة.

يعتمد استدعاء الطريقة على نوع الكائن الذي يستدعي الطريقة الثابتة. هذا يعني:

  • إذا قمنا باستدعاء طريقة ثابتة باستخدام كائن الفئة الأصل، فسيتم استدعاء الطريقة الثابتة الأصلية من الفئة الأصل.
  • إذا قمنا باستدعاء طريقة ثابتة باستخدام كائن فئة فرعية، فسيتم استدعاء الطريقة الثابتة للفئة الفرعية.

في المثال التالي، لدى ParentClass طريقة ثابتة تسمى العرض () ولدى ChildClass أيضًا نفس توقيع الطريقة. الطريقة الموجودة في الفئة المشتقة (ChildClass) تخفي الطريقة الموجودة في الفئة الأساسية. دعونا نرى مثالا.

OverloadStaticMethodExample3.java

 public class OverloadStaticMethodExample3 { public static void main(String args[]) { ParentClass pc = new ChildClass(); //calling display() method by parent class object pc.display(); } } //parent class class ParentClass { //we cannot override the display() method public static void display() { System.out.printf('display() method of the parent class.'); } } //child class class ChildClass extends ParentClass { //the same method also exists in the ParentClass //it does not override, actually it is method hiding public static void display() { System.out.println('Overridden static method in Child Class in Java'); } } 

انتاج:

 display() method of the parent class.