English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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

في Javaواجهةمثل الفئات، ولكنها تحتوي فقط على抽象 ومساحات final وstatic.

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

طرق ثابتة في واجهات Java منذ Java 8

من Java 8، يمكنك استخدام طرق ثابتة في واجهة (مع الجسم). تحتاج إلى استخدام اسم الواجهة لتسميتها، مثل طرق الثابتة في الفئات.

مثال

في المثال التالي، نحدد طريقة ثابتة في واجهة ونصل إليها من خلال فئة تحقق من هذه الواجهة.

interface MyInterface{
   public void demo();
   public static void display() {
      System.out.println("This is a static method");
   }
}
public class InterfaceExample{
   public void demo() {
      System.out.println("This is the implementation of the demo method");
   }
   public static void main(String args[]) {
      InterfaceExample obj = new InterfaceExample();
      obj.demo();
      MyInterface.display();
   }
}

نتائج الإخراج

هذا هو تنفيذ طريقة demo
هذا هو طريقة الـ static

الأجزاء الثابتة

أالأجزاء الثابتةهذا هو الكود الذي يستخدم كلمة المفتاح static. عادةً، تستخدم هذه للتحقق من أعضاء الثابتة. يقوم JVM بتنفيذ الأجزاء الثابتة قبل طريقة main عند تحميل الكائن.

public class MyClass {
   static{
      System.out.println("مرحبًا هذا هو الجزء الثابت");
   }
   public static void main(String args[]){
      System.out.println("هذا هو طريقة الـ main");
   }
}

نتائج الإخراج

مرحبًا هذا هو الجزء الثابت
هذا هو طريقة الـ main

الأجزاء الثابتة في الواجهة

أهمًا، إذا لم يتم تعيين أجزاء الثابتة عند الت声明، فإنها ستُستخدم لتعيين الكائن/المعلمات الثابتة.

عندما تُعلن عن حقل في واجهة، يجب أن تعطيه قيمة، وإلا سيُنتج خطأ في التجميع.

مثال

interface Test{
   public abstract void demo();
   public static final int num;
}

خطأ في التجميع

Test.java:3: error: = expected
   public static final int num;
                              ^
1 error

عندما تُخصص قيمة لمعلمة ثابتة نهائية في واجهة، سيُحل هذا المشكلة.

interface Test{
   public abstract void demo();
   public static final int num = 400;
}

لذلك، لا يجب أن يحتوي واجهة على أجزاء ثابتة.

قد تفضل