الواجهة Interface في الجافا هي احدى طرق التجريد abstraction، وهي عادة تتكون من مجموعة من الطرق الغير منفذة (Implemented)، ويتم تعريف التنفيذ لتلك الطرق في الاصناف التي تنفذ الواجهة Interface.

تشغيل
interface Animal{
	void eat();
	void move();
}

class Dog implements Animal{
	int energy;
	
	public void eat(){
		energy = energy + 5;
	}
	
	public void move(){
		if(energy <= 0){
			System.out.println("Ho Ho !! Can not move!!");
		}else{
			System.out.println("Ho Ho !! Moving...");
			energy --;
		}
		
	}
}


class Cat implements Animal{
	int energy;
	
	public void eat(){
		energy = energy + 3;
	}
	
	public void move(){
		if(energy <= 0){
			System.out.println("Mew Mew !! Can not move!!");
		}else{
			System.out.println("Mew Mew !! Moving...");
			energy --;
		}
		
	}
}


class Main{
	public static void main(String[] args){
		Animal dog = new Dog();
		dog.move(); //  Ho Ho !! Can not move!!
	
		dog.eat();
		dog.move(); // "Ho Ho !! Moving...
	}
}
  • نستخدم implements بدل من extends لنستطيع تعريف تنفيذ (implement) الواجهة
  • افتراضيا، كل الطرق في الواجهة (Interface) تكون مجردة (abstract) ولا نحتاج ان نسبقها بكلمة abstract
  • لا تحتوي الواجهة (Interface) على دالة البناء (Constructor)
  • لا يمكن انشاء كائنات من الواجهة، لكن لابد من تعريف صنف ينفذ الواجهة لانشاء كائنات
  • يجب على الاصناف التي تنفذ الواجهات بتنفيذ طرق الواجهات الغير منفذة (Not Implemented)
منذ صدور جافا 8 في سنة 2014، اصبح بامكاننا تعريف تنفيذ (implementation) للطرقة الافتراضية (default method) و سيتم شرحها مستقبلا.

الوجهات المتعددة (multiple interfaces)

تستطيع الاصناف (classes) في الجافا من تعريف تنفيذ (implement) اكثر من واجهة

تشغيل
interface Man{
	void walk();
}

interface Bat{
	void fly();
}


class BatMan implements Man, Bat{
	
	public void walk(){
		System.out.println("Walking ...");
	}
	
	public void fly(){
		System.out.println("Flying ...");
	}
}


class Main{
	public static void main(String[] args){
		BatMan batman = new BatMan();
		batman.fly(); // Flying ...
		batman.walk(); // Walking ...
	}
}

عندما نقوم بالتمديد (extends) لاكثر من واجهة نفصل ما بينهم بالفاصلة “,”

extends

نستطيع استخدام extends بين الواجهات مثل الاصناف، حيث تكون هناك واجهة الاب (Parent) و واجهة الابن (Child) و تستطيع الوصول الى كل الطرق المعرفة في الاب (Parent)

interface Animal{
	void eat();
}

interface Bird extends Animal{
	void fly();
}
نستطيع ان ترث الواجهات اكثر من واجهة (interface) في الجافا مثل: Football extends Sport,Hobby

guest
0 تعليقات
Inline Feedbacks
اظهر كل التعليقات