ما هي الواجهة في Java وكيفية تنفيذها؟



ستساعدك هذه المقالة في اتباع نهج شامل تجاه Java Interface وأنواع مختلفة من الأمثلة المتعلقة بوظائفها.

' واجهه المستخدم هو مستوى متقدم لتحقيق التجريد في لغة برمجة جافا. تساعد واجهة Java في ملفات تقليل التعقيد في الكود ويبسط ملف مقروئية . في هذه المقالة سوف أشرح لك واجهة جافا من خلال الأجندة التالية.

ما هي واجهة جافا؟

واجهة الكمبيوتر يُعرف بالحد الذي يفصل بين نظامين أو أكثر. يقوم بتبادل البيانات بين المكونات في نظام يمكنه الإشارات أو الأوامر أو البروتوكولات.





java-interface

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



أوجه التشابه بين الفئة والواجهة.

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

  • مثل الفئة ، يمكن للواجهة أيضًا أن تحتوي على أكبر عدد ممكن من الطرق كما هو مطلوب.
  • على غرار الفئات ، تمت كتابة الواجهة أيضًا بامتداد .java ملف التمديد.
  • من المثير للدهشة أن الرمز الثانوي للواجهة سيظهر في ملف .صف دراسي ملف.
  • تظهر الواجهة في شكل حزمة ويكون الرمز الثانوي الخاص بها في دليل يتطابق مع اسم الحزمة.

لماذا نحتاج إلى واجهة؟

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



أباتشي سبارك مقارنة هادوب مابريدس

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

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

// رمز الفئة أ

حزمة متعددة من الفئة A {void msg () {System.out.println ('Hello')}}

// كود الفئة ب

حزمة متعددة من فئة B {void msg () {System.out.println ('Welcome')}}

كود الفئة ج

حزمة متعددة من الفئة C تمتد A ، B {// لن يتم قبول هذا من قبل Java ، وسوف يؤدي إلى حدوث خطأ ولن يتم تنفيذ الكود. public static void main (String args []) {C obj = new C () obj.msg ()}}

انتاج:

خطأ. هذا النهج الخاص يلقي استثناء. Java لا تدعم الميراث المتعدد. يُعرف هذا الخطأ باسم مشكلة الماس 

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

// كود الواجهة

حزمة MIS public interface solution {public void Hello () public void Welcome ()}

// كود الفصل

package MIS public classA تنفذ الحل {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('مرحبًا بك في Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

انتاج:

مرحبا بالعالم
مرحبًا بكم في Edureka

إعلان واجهة Java: بناء الجملة

واجهة interface_name {// تعلن عن الحقول الثابتة // أعلن عن الأساليب () // الطرق الافتراضية}

دعونا نلقي نظرة على مثال على واجهة جافا

مثال على واجهة جافا

دعونا ننشئ آلة حاسبة بسيطة تعتمد على واجهة جافا.

// كود الواجهة

package basicoperations public interface maths {public void add () public void sub () public void mul () public void div ()}

// كود الفصل

package basicoperations import java.util.Scanner public class student1 تنفذ الرياضيات {Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('أدخل أي قيمتين صحيحتين لإجراء الإضافة') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Sum of' + a + 'and' + b + 'is' + s)}Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('أدخل أي قيمتين صحيحتين لإجراء عملية الطرح') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('اختلاف' + a + 'و' + b + 'هو' + s)}Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('أدخل أي قيمتين صحيحتين الضرب ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' منتج '+ a +' و '+ b +' هو '+ s)}Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('أدخل أي قسمين لقيم عدد صحيحين') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('حاصل' + a + 'و' + b + 'هو' + s)} عام ثابت باطل رئيسي (سلسلة [] أرجس) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

انتاج:

للتقدم أكثر ، سوف نتعلم تداخل واجهة Java.

تعشيش واجهة جافا

واجهة التعشيش هي عملية إعلان واجهة داخل أخرى الواجهة الحالية أو إعلان واجهة داخل ملف صف دراسي. تُعرف الواجهة المتداخلة أيضًا باسم ملف الواجهة الداخلية.

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

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

هو a vs has a java

// كود الواجهة

حزمة Nest واجهة عامة OuterInterface {void display () واجهة InnerInterface {void InnerMethod ()}}

// كود الفصل

حزمة فئة Nest NestedInterfaceDemo تنفذ OuterInterface.InnerInterface {public void InnerMethod () {int n = 10، t1 = 0، t2 = 1 System.out.print ('First' + n + 'terms:') for (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nPrinting from Nested InnerInterface method ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

انتاج:

أول 10 فصول: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + الطباعة من طريقة InnerInterface المتداخلة ...!

الآن ، دعونا نحاول تداخل a واجهة جافا داخل فئة جافا.

// كود الواجهة

حزمة Nest2 فئة عامة EdurekaClass {واجهة EdurekaInterface {void NestedMethod ()}}

// كود الفصل

حزمة Nest2 class NestedInterfaceDemo2 تنفذ EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] & for (intray itray = 0 .length i ++) result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (سلسلة جديدة (نتيجة))} فراغ رئيسي عام ثابت (سلاسل سلسلة []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

انتاج:

akerudE

على الرغم من أن الواجهة تبدو مشابهة تقريبًا للفئة ، إلا أن هناك بعض الاختلافات بينهما ، دعنا نناقش الاختلافات بينهما.

الفرق بين فئة جافا وواجهة جافا

واجهه المستخدم صف دراسي
يدعم الوراثة المتعددة لا يدعم الوراثة المتعددة
لايوجد أعضاء بيانات يشمل أعضاء البيانات
لايوجد بنائين يشمل المنشئين
يشمل أعضاء غير مكتملين (عضو توقيع) يشمل كلا من الأعضاء الكامل (الملخص) وغير المكتمل
لا يحتوي على معدِّلات وصول يتضمن معدِّلات الوصول
لا تحتوي الواجهة على أعضاء ثابتون الفصل لديه كل أعضائه ثابتة

مزايا وعيوب واجهة جافا

مزايا:

  • تدعم واجهة جافا تعدد الميراث.
  • تتيح واجهة Java للمبرمجين تفكيك أساليب البرمجة المعقدة وتبسيط التبعيات بين الأشياء.
  • تجعل واجهة Java ملف أعضاء البيانات و طرق في تطبيق ليتم إقرانه بشكل فضفاض.

سلبيات:

  • يؤدي استخدام واجهة Java إلى إسقاط ملف سرعة التنفيذ من التطبيق.
  • يتم استخدام واجهات Java في التطبيق إما بشكل متكرر على نطاق واسع أو نادرًا ما يتم استخدامها على الإطلاق.

النقاط الرئيسية في واجهة جافا

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

// كود الواجهة

الحزمة extInterface public interface extInterface {public void method1 () public void method2 ()}

// كود الفصل

package extInterface import java.util.Scanner class Edureka تنفذ extInterface {public void method1 () {System.out.println ('Implementation of method1') Scanner scanner = new Scanner (System.in) System.out.println ('أدخل رقم للعثور على الجذر التربيعي في Java: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' الجذر التربيعي للعدد:٪ f هو:٪ f٪ n '، مربع ، squareRoot)} public void method2 () {System.out.println ('Implementation of method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

انتاج:

تنفيذ الطريقة 1 أدخل رقمًا للعثور على الجذر التربيعي في Java: 16 الجذر التربيعي للعدد: 16.0 هو: 4.0
  • يمكن للفئة تنفيذ وراثة متعددة في مثيل واحد. دعونا نفهمها من خلال الكود التالي.

// كود الواجهة 1

الحزمة ExtendInt public interface Interface1 {public void armstrong ()}

// كود الواجهة 2

package ExtendInt public interface Interface2 {public void prime ()} // Class Code package ExtendInt public class Edureka2 تنفذ Interface1، Interface2 {public void armstrong () {int c = 0، a، temp int n = 153 // input temp = n while (n & gt0) {a = n٪ 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('armstrong number') else System.out.println ('Not armstrong number') System.out.println ('Extending to Interface 1')} عدد أولي عام باطل () {int i، m = 0، flag = 0 int n = 3 // input m = n / 2 if (n == 0 || n == 1) {System.out.println (n + 'ليس عددًا أوليًا')} آخر {لـ (i = 2i & lt = mi ++) {if (n٪ i == 0) {النظام .out.println (n + 'ليس رقمًا أوليًا') علامة = 1 فاصل}} إذا (العلم == 0) {System.out.println (n + 'هو رقم أولي')}} System.out.println ('تمديد to Interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

انتاج:

3 هو الرقم الأولي الممتد للواجهة 2 رقم armstrong الممتد إلى الواجهة 1
  • تتطلب واجهة Java المتغيرات التي تم الإعلان عنها ليتم تهيئتها في وقت الإعلان.
  • يتم تعيين معدِّلات الوصول للواجهة على Public static والنهائي افتراضيًا. دعونا نفهم هذا بمثال

// كود الواجهة

package test public interface جرب {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • جميع التصريحات أعلاه صحيحة وصالحة داخل الواجهة.
  • واجهة Java قادرة على تمديد أي عدد من الواجهات ، لكن لا يمكنها أبدًا تنفيذ أي منها.
  • يمكن لفئة Java تنفيذ أي عدد من الواجهات.
  • لا يمكن لـ Java Class تنفيذ واجهات بنفس اسم الطريقة ونوع إرجاع مختلف.
  • إذا كانت هناك طريقتان أو أكثر بنفس اسم الطريقة ، وموجودة في واجهات متعددة ، فإن تنفيذ الطريقة لمرة واحدة يكفي. دعونا نفهم هذا بمثال عملي.

// كود الواجهة

الحزمة نفس الواجهة العامة A {public void display ()} // Interface Code package نفس الواجهة العامة B {public void display ()} // Class Code package نفس الفئة A، B {public void display () {System.out .println ('displaying data')} public static void main (String [] args) {same print = new same () print.display ()}}

انتاج:

مرحبًا بكم في Edureka E-Learning

بهذا نصل إلى نهاية هذا المقال. أتمنى أن تكون قد فهمت أهمية الواجهة ، وبناء الجملة ، والوظائف ، وتداخل الواجهة ، والنقاط الرئيسية لواجهة Java والعمليات التي يتم إجراؤها باستخدامها.

الآن بعد أن فهمت أساسيات Java ، تحقق من ملف من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم. تم تصميم دورة تدريب وشهادة Java J2EE و SOA من Edureka للطلاب والمهنيين الذين يرغبون في أن يصبحوا مطوري Java. تم تصميم الدورة التدريبية لمنحك السبق في برمجة Java وتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & ربيع .

لديك سؤال لنا؟ اذكرها في قسم التعليقات في مدونة 'Java Interface' وسنعاود الاتصال بك في أقرب وقت ممكن.