CodeGym /בלוג Java /Random-HE /מיישמת בג'אווה
John Squirrels
רָמָה
San Francisco

מיישמת בג'אווה

פורסם בקבוצה
כאשר יש המדברים על פרדיגמת ה-Java OOP של ירושה, הם בדרך כלל מתכוונים להרחבת כיתת אב עם יורש, כיתת ילד. אולם כאשר אתה נתקל במילת המפתח Java implements, זה אומר שאנו עוברים לרמה אחרת של הפשטה ומתחילים לעבוד עם ממשקים ב-Java. אנחנו הולכים לדבר על מה הם ממשקים, בשביל מה הם מיועדים, איך היישום קורה.

מהו ממשק ויישום

בטח שמעתם את המילה "ממשק" פעמים רבות. לדוגמה, למחשב יש ממשק קלט (עכבר ומקלדת), לתוכניות רבות יש ממשקי משתמש. במובן הרחב, ממשק הוא קישור בין שני צדדים המקיימים אינטראקציה. לדוגמה, אותה מקלדת או שלט רחוק לטלוויזיה. בתכנות, ובג'אווה בפרט, ממשק הוא חוזה ספציפי שאומר מה תעשה המחלקה שתטמיע אותו. ממשק רק מגדיר התנהגות. זה לא אומר כלום על האובייקט שיטמיע את זה. אתה יכול להכריז על ממשק ב-Java כך:
public interface MyInterface  {

     // constants declaration
     // methods without implementation
     // static methods
     // default methods (default)
     // private methods
}
להלן תחביר של Implements ב-Java:
public class MyClass implements MyInterface{
//implementing the methods of MyInterface
//Other code
}
ממשק מתאר התנהגות מבלי לציין זאת. למשל, התנהגות כמו "תנועה" יכולה להיות מיושמת על סוגים שונים של חפצים: אופניים, אדם, מכונית, מים בנהר וכדומה. התנהגות השחייה יכולה להיות התנהגות של ברווז, ספינה או דג. לחפצים האלה אין שום דבר במשותף מלבד העובדה שהם יכולים לנוע או לשחות. כן, ועצם התנועה בשחייה הם שונים מאוד. עם זאת, ב-Java אתה יכול ליצור שיעורי ברווז , סירה , דגים ולתת להם ליישם את היכולת לשחות. כאן נעשה שימוש במילת המפתח Java Implements .

יישם דוגמה למילת מפתח

public interface Swimmable {

   void moveForward();
   void TurnRight();
   void TurnLeft();

}
כפי שאתה יכול לראות, השיטות עצמן אינן מיושמות. אבל הכרזנו שהשיעורים שמיישמים את הממשק הזה חייבים להיות מסוגלים לשחות בקו ישר, כמו גם לפנות ימינה ושמאלה. בואו ניצור מחלקות שיטמיעו את הממשק הזה.
public class Duck implements Swimmable {
//implementing the methods
   public void moveForward() {
       System.out.println(" Quack, I am moving forward...");
   }

   public void TurnRight(){
       System.out.println("I am turning right...");
   }
   public void TurnLeft(){
       System.out.println("I am turning left...");

   }

   public void Stop() {
       System.out.println("Quack. I am relaxing on the surface of the water...");
   }

}

public class Fish implements Swimmable {

   public void moveForward() {
       System.out.println("I am moving forward...");
   }

   public void TurnRight(){
       System.out.println("I am turning right...");
   }
   public void TurnLeft() {
       System.out.println("I am turning left...");
   }

   public void turnUp(){
       System.out.println("I am turning up...");
   }

   public void turnDown(){
       System.out.println("I am turning down...");
   }

   public void Stop() {
       System.out.println("I am relaxing somewhere under the water surface...");
   }
}
כל המחלקות שמיישמות את ממשק Swimmable , על פי החוזה, חייבות להיות מסוגלות לשחות קדימה (ליישם את שיטת moveForward() ), וכן לפנות ימינה ושמאלה. נדרש יישום של שיטות אלו. ברווז ודג שוחים אחרת. נניח שלדג יש שתי שיטות נוספות המיישמות את יכולתו לשחות למעלה ולמטה. בממשק הניתן לשחייה אין את זה. עם זאת, אם ניצור ילד מכיתת הדגים, למשל, טונה או סלמון, הם, כמו כל "דג", יוכלו לשחות מעלה ומטה.

ממשקים מרובים ב-Java

כפי שאתה ודאי כבר יודע, ג'אווה אינה תומכת בהורשה מרובה. זה אומר שאפשר להוריש מחלקה אחת ממעמד-על אחד בלבד. עם זאת, באופן מסוים אתה עדיין יכול להשתמש ב"ירושה מרובה" ב-Java, מכיוון שכיתה יכולה ליישם ממשקים מרובים.
To implement multiple interfaces, use the next syntax:
interface MyFirstInterface {
   public void myMethod();
}
interface MySecondInterface {
   public void myOtherMethod();
}

// MyClass implements both MyFirstInterface and MySecondInterface
class MyClass implements MyFirstInterface, MySecondInterface {
   public void myMethod() {
      //method implementation
   }
   public void myOtherMethod() {
     //method implementation
   }
}

דוגמה לממשקים מרובים

זכור כי ברווז יכול לא רק לשחות, אלא גם לעוף. בואו נכתוב את ממשק הטיסה וניישם אותו בברווז שלנו.
public interface Flyable {
   double startAge = 0.1;
   void fly();
}

public class Duck implements Swimmable, Flyable {

   public void moveForward() {
       System.out.println(" Quack, I am moving forward...");
   }

   public void TurnRight(){
       System.out.println("I am turning right...");
   }
   public void TurnLeft(){
       System.out.println("I am turning left...");

   }

   public void Stop() {
       System.out.println("Quack. I am relaxing on the surface of the water...");
   }

   public void fly(){
       System.out.println("I am flying!!!");
   }

}
ושוב, חשוב לזכור מדוע אנו כותבים את הממשק. נניח שאם זה מיושם על ידי ציפור, מטוס, צניחה חופשית ושן הארי, הטיסות שלהם יהיו שונות לחלוטין.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION