- واجهه المستخدم
- مثال على الواجهة
- الميراث المتعدد عن طريق الواجهة
- لماذا يتم دعم الوراثة المتعددة في الواجهة بينما لا يتم دعمها في حالة الفصل.
- واجهة العلامة
- واجهة متداخلة
ان واجهة في جافا هو مخطط للفئة. لديها ثوابت ثابتة وأساليب مجردة.
الواجهة في جافا هي آلية لتحقيق التجريد . يمكن أن يكون هناك فقط طرق مجردة في واجهة Java، وليس نص الطريقة. يتم استخدامه لتحقيق التجريد والتعدد الميراث في جاوة .
بمعنى آخر، يمكنك القول أن الواجهات يمكن أن تحتوي على أساليب ومتغيرات مجردة. لا يمكن أن يكون له نص الطريقة.
واجهة جافا أيضا يمثل العلاقة IS-A .
لا يمكن إنشاء مثيل له تمامًا مثل الفئة المجردة.
توليد رقم عشوائي في جافا
منذ Java 8، يمكننا الحصول على الأساليب الافتراضية والثابتة في واجهة.
منذ Java 9، يمكننا الحصول على طرق خاصة في واجهة.
لماذا استخدام واجهة جافا؟
هناك ثلاثة أسباب رئيسية لاستخدام الواجهة. وترد أدناه.
- يتم استخدامه لتحقيق التجريد.
- من خلال الواجهة، يمكننا دعم وظيفة الميراث المتعدد.
- يمكن استخدامه لتحقيق اقتران فضفاض.
كيفية الإعلان عن واجهة؟
يتم الإعلان عن الواجهة باستخدام الكلمة الأساسية للواجهة. يوفر التجريد الكامل. يعني أن جميع الطرق في الواجهة تم الإعلان عنها بنص فارغ، وجميع الحقول عامة وثابتة ونهائية بشكل افتراضي. يجب على الفئة التي تنفذ واجهة أن تنفذ جميع الطرق المعلنة في الواجهة.
بناء الجملة:
interface { // declare constant fields // declare methods that abstract // by default. }
تحسين واجهة جافا 8
منذ جافا 8 يمكن أن تحتوي الواجهة على طرق افتراضية وثابتة والتي سيتم مناقشتها لاحقًا.
الإضافة الداخلية من قبل المترجم
يضيف مترجم Java كلمات رئيسية عامة ومجردة قبل طريقة الواجهة. علاوة على ذلك، فهو يضيف كلمات رئيسية عامة وثابتة ونهائية قبل أعضاء البيانات.
بمعنى آخر، حقول الواجهة عامة وثابتة ونهائية بشكل افتراضي، والطرق عامة ومجردة.
ترتيب SQL حسب التاريخ
العلاقة بين الفئات والواجهات
كما هو موضح في الشكل الموضح أدناه، فإن الفصل يمتد إلى فئة أخرى، والواجهة توسع إلى واجهة أخرى، ولكن أ تطبق الطبقة واجهة .
مثال لواجهة جافا
في هذا المثال، تحتوي الواجهة القابلة للطباعة على طريقة واحدة فقط، ويتم توفير تنفيذها في الفئة A6.
interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } }اختبره الآن
انتاج:
الانضمام إلى تحديث MySQL
Hello
مثال على واجهة Java: Drawable
في هذا المثال، تحتوي الواجهة Drawable على طريقة واحدة فقط. يتم تنفيذه من خلال فئات المستطيل والدائرة. في السيناريو الحقيقي، يتم تعريف الواجهة من قبل شخص آخر، ولكن يتم توفير تنفيذها من قبل موفري التنفيذ المختلفين. علاوة على ذلك، يتم استخدامه من قبل شخص آخر. يتم إخفاء جزء التنفيذ من قبل المستخدم الذي يستخدم الواجهة.
الملف: TestInterface1.java
//Interface declaration: by first user interface Drawable{ void draw(); } //Implementation: by second user class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class Circle implements Drawable{ public void draw(){System.out.println('drawing circle');} } //Using interface: by third user class TestInterface1{ public static void main(String args[]){ Drawable d=new Circle();//In real scenario, object is provided by method e.g. getDrawable() d.draw(); }}اختبره الآن
انتاج:
drawing circle
مثال واجهة جافا: البنك
دعونا نرى مثالاً آخر لواجهة جافا التي توفر تنفيذ واجهة البنك.
الملف: TestInterface2.java
interface Bank{ float rateOfInterest(); } class SBI implements Bank{ public float rateOfInterest(){return 9.15f;} } class PNB implements Bank{ public float rateOfInterest(){return 9.7f;} } class TestInterface2{ public static void main(String[] args){ Bank b=new SBI(); System.out.println('ROI: '+b.rateOfInterest()); }}اختبره الآن
انتاج:
ROI: 9.15
الوراثة المتعددة في Java عن طريق الواجهة
إذا طبقت الفئة واجهات متعددة، أو قامت الواجهة بتوسيع واجهات متعددة، يُعرف ذلك باسم الميراث المتعدد.
التفاف النص المغلق
interface Printable{ void print(); } interface Showable{ void show(); } class A7 implements Printable,Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ A7 obj = new A7(); obj.print(); obj.show(); } }اختبره الآن
Output:Hello Welcome
س) لا يتم دعم الوراثة المتعددة من خلال الفصل في Java، ولكنه ممكن عن طريق الواجهة، لماذا؟
كما أوضحنا في فصل الميراث، لا يتم دعم الميراث المتعدد في حالة فصل بسبب الغموض. ومع ذلك، فهو مدعوم في حالة وجود واجهة لأنه لا يوجد أي غموض. وذلك لأن تنفيذه يتم توفيره بواسطة فئة التنفيذ. على سبيل المثال:
interface Printable{ void print(); } interface Showable{ void print(); } class TestInterface3 implements Printable, Showable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ TestInterface3 obj = new TestInterface3(); obj.print(); } }اختبره الآن
انتاج:
Hello
كما ترون في المثال أعلاه، فإن الواجهة القابلة للطباعة والقابلة للعرض لها نفس الأساليب ولكن يتم توفير تنفيذها بواسطة فئة TestTnterface1، لذلك ليس هناك أي غموض.
وراثة الواجهة
تطبق الفئة واجهة، لكن واجهة واحدة تمتد إلى واجهة أخرى.
interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class TestInterface4 implements Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ TestInterface4 obj = new TestInterface4(); obj.print(); obj.show(); } }اختبره الآن
انتاج:
Hello Welcome
جافا 8 الطريقة الافتراضية في الواجهة
منذ Java 8، أصبح بإمكاننا الحصول على نص الطريقة في الواجهة. ولكن علينا أن نجعلها الطريقة الافتراضية. دعونا نرى مثالا:
تخفيض السعر يتوسطه خط
الملف: TestInterfaceDefault.java
interface Drawable{ void draw(); default void msg(){System.out.println('default method');} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }}اختبره الآن
انتاج:
drawing rectangle default method
جافا 8 طريقة ثابتة في الواجهة
منذ Java 8، أصبح لدينا طريقة ثابتة في الواجهة. دعونا نرى مثالا:
الملف: TestInterfaceStatic.java
interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }}اختبره الآن
انتاج:
drawing rectangle 27
س) ما هي العلامة أو الواجهة الموسومة؟
تُعرف الواجهة التي لا تحتوي على عضو باسم واجهة العلامة أو الواجهة الموسومة، على سبيل المثال، قابل للتسلسل ، قابلة للاستنساخ ، عن بعد ، وما إلى ذلك. يتم استخدامها لتوفير بعض المعلومات الأساسية إلى JVM حتى يتمكن JVM من إجراء بعض العمليات المفيدة.
//How Serializable interface is written? public interface Serializable{ }
واجهة متداخلة في جافا
ملاحظة: يمكن أن تحتوي الواجهة على واجهة أخرى تُعرف بالواجهة المتداخلة. سنتعرف عليه بالتفصيل في فئات متداخلة الفصل. على سبيل المثال:
interface printable{ void print(); interface MessagePrintable{ void msg(); } }المزيد عن الواجهة المتداخلة