logo

ממשק ב-Java

  1. מִמְשָׁק
  2. דוגמה לממשק
  3. ירושה מרובה על ידי ממשק
  4. מדוע ירושה מרובה נתמכת בממשק בזמן שהיא אינה נתמכת במקרה של מחלקה.
  5. ממשק מרקר
  6. ממשק מקונן

א ממשק ב-Java הוא שרטוט של כיתה. יש לו קבועים סטטיים ושיטות מופשטות.

הממשק בג'אווה הוא מנגנון להשגה הַפשָׁטָה . יכולות להיות רק שיטות מופשטות בממשק Java, לא גוף השיטה. הוא משמש להשגת הפשטה ומרובה ירושה בג'אווה .

myflixr

במילים אחרות, אפשר לומר שלממשקים יכולים להיות שיטות ומשתנים מופשטים. לא יכול להיות לו גוף שיטה.

ממשק Java גם מייצג את מערכת היחסים IS-A .

לא ניתן ליצור את זה בדיוק כמו המעמד המופשט.

מאז Java 8, אנחנו יכולים לקבל ברירת מחדל ושיטות סטטיות בממשק.

מאז Java 9, אנחנו יכולים לקבל שיטות פרטיות בממשק.

למה להשתמש בממשק Java?

יש בעיקר שלוש סיבות להשתמש בממשק. הם ניתנים להלן.

  • הוא משמש להשגת הפשטה.
  • לפי ממשק, אנו יכולים לתמוך בפונקציונליות של ירושה מרובה.
  • זה יכול לשמש כדי להשיג צימוד רופף.
למה להשתמש בממשק Java

איך להכריז על ממשק?

ממשק מוכרז באמצעות מילת המפתח ממשק. הוא מספק הפשטה מוחלטת; פירושו שכל השיטות בממשק מוצהרות עם הגוף הריק, וכל השדות הם ציבוריים, סטטיים וסופיים כברירת מחדל. מחלקה המיישמת ממשק חייבת ליישם את כל השיטות המוצהרות בממשק.

תחביר:

 interface { // declare constant fields // declare methods that abstract // by default. } 

שיפור ממשק Java 8

מאז Java 8 , לממשק יכולות להיות שיטות ברירת מחדל וסטטיות, עליהן נדון בהמשך.

תוספת פנימית על ידי המהדר

מהדר Java מוסיף מילות מפתח ציבוריות ומופשטות לפני שיטת הממשק. יתר על כן, הוא מוסיף מילות מפתח ציבוריות, סטטיות וסופיות לפני חברי הנתונים.

במילים אחרות, שדות ממשק הם ציבוריים, סטטיים וסופיים כברירת מחדל, והשיטות הן ציבוריות ומופשטות.

ממשק ב-java

הקשר בין מחלקות וממשקים

כפי שמוצג באיור המופיע למטה, מחלקה מרחיבה מחלקה אחרת, ממשק מרחיב ממשק אחר, אבל א הכיתה מיישמת ממשק .

איך לשרשר מחרוזות ב-java
הקשר בין כיתה לממשק

דוגמה לממשק Java

בדוגמה זו, לממשק להדפסה יש רק שיטה אחת, והיישום שלה מסופק במחלקה 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(); } } 
בדוק את זה עכשיו

תְפוּקָה:

 Hello 

דוגמה לממשק Java: ניתן לצייר

בדוגמה זו, לממשק 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 

דוגמה לממשק Java: בנק

בואו נראה דוגמה נוספת של ממשק java המספק את היישום של ממשק הבנק.

קובץ: 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 לפי ממשק

אם מחלקה מיישמת ממשקים מרובים, או ממשק מרחיב ממשקים מרובים, זה ידוע בתור ירושה מרובה.

כיבוי מצב מפתח
ירושה מרובה ב-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 

ש) ירושה מרובה לא נתמכת דרך class ב-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 

שיטת ברירת המחדל של Java 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 

שיטה סטטית של Java 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{ } 

ממשק מקונן ב-Java

הערה: לממשק יכול להיות ממשק אחר המכונה ממשק מקונן. נלמד את זה בפירוט ב כיתות מקוננות פֶּרֶק. לדוגמה:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
עוד על ממשק מקונן