واجهة جافا
واجهات
هناك طريقة أخرى لتحقيق التجريد في Java ، وهي استخدام الواجهات.
إن " فئة مجردةinterface
" تمامًا تُستخدم لتجميع الطرق ذات الصلة بأجسام فارغة:
مثال
// interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void run(); // interface method (does not have a body)
}
للوصول إلى طرق الواجهة ، يجب "تنفيذ" الواجهة (كيندا مثل موروث) بواسطة فئة أخرى باستخدام implements
الكلمة الأساسية (بدلاً من extends
). يتم توفير نص طريقة الواجهة بواسطة فئة "التطبيق":
مثال
// Interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void sleep(); // interface method (does not have a body)
}
// Pig "implements" the Animal interface
class Pig implements Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The pig says: wee wee");
}
public void sleep() {
// The body of sleep() is provided here
System.out.println("Zzz");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
myPig.sleep();
}
}
ملاحظات على الواجهات:
- مثل الفئات المجردة ، لا يمكن استخدام الواجهات لإنشاء كائنات (في المثال أعلاه ، لا يمكن إنشاء كائن "حيوان" في MyMainClass)
- لا تحتوي طرق الواجهة على جسم - يتم توفير الجسم بواسطة فئة "التنفيذ"
- عند تنفيذ الواجهة ، يجب تجاوز جميع أساليبها
- طرق الواجهة بشكل افتراضي
abstract
وpublic
- تكون سمات الواجهة بشكل افتراضي
public
وstatic
final
- لا يمكن أن تحتوي الواجهة على مُنشئ (حيث لا يمكن استخدامها لإنشاء كائنات)
لماذا ومتى تستخدم الواجهات؟
1) لتحقيق الأمان - قم بإخفاء تفاصيل معينة واعرض فقط التفاصيل المهمة للعنصر (الواجهة).
2) لا تدعم Java "الوراثة المتعددة" (يمكن للفئة أن ترث فقط من فئة ممتازة واحدة). ومع ذلك ، يمكن تحقيق ذلك باستخدام الواجهات ، لأن الفئة يمكنها تنفيذ واجهات متعددة. ملاحظة: لتنفيذ واجهات متعددة ، افصل بينها بفاصلة (انظر المثال أدناه).
واجهات متعددة
لتنفيذ واجهات متعددة ، افصل بينها بفاصلة:
مثال
interface FirstInterface {
public void myMethod(); // interface method
}
interface SecondInterface {
public void myOtherMethod(); // interface method
}
class DemoClass implements FirstInterface, SecondInterface {
public void myMethod() {
System.out.println("Some text..");
}
public void myOtherMethod() {
System.out.println("Some other text...");
}
}
class Main {
public static void main(String[] args) {
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}