CodeGym /وبلاگ جاوا /Random-FA /در جاوا پیاده سازی می کند
John Squirrels
مرحله
San Francisco

در جاوا پیاده سازی می کند

در گروه منتشر شد
هنگامی که برخی در مورد الگوی وراثت Java OOP صحبت می کنند، معمولاً به معنای گسترش یک کلاس والد با یک وارث، یک کلاس فرزند هستند. اما وقتی با کلمه کلیدی Java implements مواجه شدید، به این معنی است که ما به سطح دیگری از انتزاع می رویم و شروع به کار با Interfaces در جاوا می کنیم. ما قصد داریم در مورد اینکه رابط ها چه هستند، برای چه هستند و چگونه پیاده سازی می شود صحبت کنیم.

رابط و پیاده سازی چیست

احتمالاً کلمه "رابط" را بارها شنیده اید. به عنوان مثال، یک کامپیوتر دارای یک رابط ورودی (ماوس و صفحه کلید) است، بسیاری از برنامه ها دارای رابط کاربری هستند. در گسترده‌ترین مفهوم، رابط پیوندی بین دو طرف متقابل است. مثلا همین کیبورد یا ریموت تلویزیون. در برنامه نویسی، و به طور خاص در جاوا، یک رابط یک قرارداد خاص است که می گوید کلاسی که آن را پیاده سازی می کند چه کاری انجام خواهد داد. یک رابط فقط رفتار را تعریف می کند. در مورد شیئی که آن را اجرا می کند چیزی نمی گوید. شما می توانید یک رابط را در جاوا به این صورت اعلام کنید:
public interface MyInterface  {

     // constants declaration
     // methods without implementation
     // static methods
     // default methods (default)
     // private methods
}
در اینجا یک نحو از Implements در جاوا آمده است:
public class MyClass implements MyInterface{
//implementing the methods of MyInterface
//Other code
}
یک رابط رفتار را بدون مشخص کردن آن توصیف می کند. به عنوان مثال، رفتاری مانند "حرکت" را می توان در مورد انواع مختلف اشیاء اعمال کرد: دوچرخه، شخص، ماشین، آب در رودخانه و غیره. رفتار شنا می تواند رفتار یک اردک، یک کشتی یا یک ماهی باشد. این اجسام هیچ وجه مشترکی ندارند جز اینکه می توانند حرکت کنند یا شنا کنند. بله، و حرکت بسیار با شنا آنها بسیار متفاوت است. با این حال، در جاوا می توانید کلاس های Duck ، Boat ، Fish را ایجاد کنید و به آنها اجازه دهید توانایی شنا را پیاده سازی کنند. اینجا جایی است که از کلمه کلیدی 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() را پیاده سازی کنند و همچنین به راست و چپ بپیچند. اجرای این روش ها الزامی است. یک اردک و یک ماهی متفاوت شنا می کنند. فرض کنید یک ماهی دو روش اضافی دارد که توانایی آن را برای شنا کردن بالا و پایین اجرا می کند. رابط Swimmable این را ندارد. با این حال، اگر یک فرزند از کلاس ماهی، به عنوان مثال، ماهی تن یا ماهی قزل آلا ایجاد کنیم، آنها، مانند هر "ماهی"، می توانند بالا و پایین شنا کنند.

چندین رابط در جاوا

همانطور که احتمالا قبلاً می دانید، جاوا از وراثت چندگانه پشتیبانی نمی کند. این بدان معناست که یک کلاس را می توان تنها از یک سوپرکلاس به ارث برد. با این حال، هنوز هم می‌توانید از «ارث بری چندگانه» در جاوا استفاده کنید، زیرا یک کلاس می‌تواند چندین رابط را پیاده‌سازی کند.
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