CodeGym /جاوا بلاگ /Random-UR /جاوا میں انٹرفیس
John Squirrels
سطح
San Francisco

جاوا میں انٹرفیس

گروپ میں شائع ہوا۔
جیسا کہ آپ جانتے ہیں، جاوا میں ہر چیز اشیاء پر مشتمل ہوتی ہے، اور اشیاء کی حالت (کھیتوں) اور رویے (طریقوں سے بیان کردہ) ہوتے ہیں۔ ایک طبقے کا طرز عمل وہ ہے جو اسے دوسرے طبقوں سے باندھ سکتا ہے۔ رویے میں مختلف خصوصیات ہو سکتی ہیں، اور بعض اوقات اسے کلاس سے باہر منتقل کرنا زیادہ آسان ہو سکتا ہے، خاص طور پر جب بات باہر کی دنیا کے ساتھ بات چیت کی ہو۔ جیسے ٹی وی کا ریموٹ کنٹرول خود ’’باکس‘‘ سے باہر ہے۔ ریموٹ کنٹرول ٹی وی کے افعال کے ساتھ صارف کے تعامل کے لیے ایک انٹرفیس ہے۔ مثال کے طور پر، آپ ایک ایسی کلاس کا تصور کر سکتے ہیں جو ایک تجریدی ہوائی جہاز یا ہیلی کاپٹر کو لاگو کرتا ہے۔ دونوں طبقوں کی اشیاء جیسے کہ زیادہ تر پرندے اڑ سکتے ہیں، اور وہ سب اسے مختلف طریقے سے کرتے ہیں۔ شاید یہ اس خصوصیت کو ایک الگ ہستی میں منتقل کرنے کے قابل ہے، اور تمام ممکنہ "فلائرز" اس ہستی سے وراثت میں ملیں گے؟ اگر آپ تجریدی کلاسوں سے پہلے ہی واقف ہیں، تو آپ صرف ایک تجریدی کلاس Flyable بنا سکتے ہیں اور اس سے Copter اور Plane کی کلاسز کو "وراثت" میں لے سکتے ہیں۔ تاہم، اگر اس طرح کی متعدد خصوصیات ہیں تو کیا ہوگا؟ مثال کے طور پر ہوائی جہاز اور ہیلی کاپٹر اڑ سکتے ہیں لیکن زمین پر بھی سفر کر سکتے ہیں۔ یہاں تک کہ اگر ہم رائڈ کلاس بناتے ہیں، تو ہم اسے مزید کاپٹر اور طیارہ تفویض نہیں کر سکتے۔ سب کے بعد، ہر جاوا کلاس میں صرف ایک پیرنٹ کلاس ہوتی ہے۔ جاوا میں انٹرفیس - 1جاوا زبان میں انٹرفیس کا استعمال جزوی طور پر اس مسئلے کو حل کرتا ہے۔ جاوا میں انٹرفیس کچھ ایسی فعالیت کی وضاحت کرتے ہیں جن کا کوئی خاص عمل درآمد نہیں ہوتا ہے، جو پھر ان انٹرفیس کو استعمال کرنے والی کلاسوں کے ذریعے لاگو کیا جاتا ہے۔ اور ایک کلاس بہت سے انٹرفیس کو نافذ کر سکتی ہے۔ درحقیقت، جاوا میں ایک انٹرفیس کو لاگو کرکے، ہم اعلان کرتے ہیں کہ ہماری کلاس کچھ کر سکتی ہے، ہم اس کے رویے کی اطلاع دیتے ہیں۔ ہم کلاس میں رویے کے ٹھوس نفاذ کو پہلے ہی انجام دیتے ہیں۔ تو ایک ہوائی جہاز اور ایک ہیلی کاپٹر مختلف طریقے سے ٹیک آف کرتے ہیں: ایک ہوائی جہاز کو رن وے کی ضرورت ہوتی ہے، جبکہ ہیلی کاپٹر عام طور پر عمودی طور پر ٹیک آف کرتا ہے۔ اس طرح کی تفصیلات کو کلاس کے اندر بہترین طریقے سے لاگو کیا جاتا ہے۔

جاوا میں انٹرفیس

جاوا زبان میں انٹرفیس کی وضاحت کرنے کے لیے، انٹرفیس کلیدی لفظ استعمال کیا جاتا ہے۔ مثال کے طور پر:
interface Voice {

    void talk();
}
اوپر والے انٹرفیس کو آواز کہتے ہیں ۔ جاوا میں ایک انٹرفیس مستقل اور طریقوں کی وضاحت کر سکتا ہے، جن پر عمل درآمد ہو سکتا ہے یا نہیں۔ عام طور پر، انٹرفیس کے طریقوں میں عمل درآمد نہیں ہوتا ہے، جیسا کہ اس مثال میں ہے۔ نفاذ کے بغیر انٹرفیس میں طریقے خلاصہ کلاسوں کے تجریدی طریقوں کی طرح ہیں۔ انٹرفیس کے طریقوں میں عام طور پر رسائی میں ترمیم کرنے والے نہیں ہوتے ہیں۔ تاہم رسائی دراصل عوامی طور پر ڈیفالٹ ہے کیونکہ انٹرفیس کا مقصد کلاس کے نفاذ کے لیے فعالیت کی وضاحت کرنا ہے۔ لہذا، تمام فعالیت عمل درآمد کے لیے کھلی ہونی چاہیے۔ انٹرفیس کو لاگو کرنے کے لیے، اپنی کلاس کا اعلان کرتے وقت Implements کلیدی لفظ استعمال کریں۔ مزید برآں، اگر کسی انٹرفیس میں ایسا طریقہ ہے جس پر عمل درآمد نہیں ہوتا ہے، تو اس طریقہ کو نافذ کرنے والی کلاس میں لاگو کیا جانا چاہیے۔
public class Duck implements Voice {


@Override
public void voice() {
   System.out.println("Quack");
}


    }

انٹرفیس کوڈ کی مثال

آئیے مزید مکمل مثال لیتے ہیں۔ ہر (اچھی طرح سے، تقریباً ہر) جانور میں آوازیں نکالنے کی صلاحیت ہوتی ہے۔ آئیے اس کیس کے لیے جاوا انٹرفیس وائس بنائیں۔ اس کا ایک ٹاک() طریقہ ہے جس پر عمل درآمد نہیں ہوتا ہے۔
public interface Voice {
   void talk();
}
اب تمام کلاسز جو وائس انٹرفیس کو سپورٹ کرتی ہیں ان کے پاس ٹاک() طریقہ کا نفاذ ہونا چاہیے ۔ آئیے دو کلاسز بنائیں - کیٹ اور ڈاگ اور اشارہ کریں کہ وہ وائس انٹرفیس کو نافذ کرتے ہیں۔ اس صورت میں، اگر آپ اس میں کلاس نافذ نہیں کرتے ہیں، تو پروگرام کام نہیں کرے گا۔ لاگو کرنے کے طریقے بہت آسان ہیں۔ کیٹ کلاس کے کسی شے کے ٹاک () طریقہ کو کال کرتے وقت ، میانو کے برابر متن اسکرین پر ظاہر ہوگا، ڈاگ کلاس کی صورت میں، ایک چھال۔ ہم کلاسز میں گیٹرز، سیٹرز اور کنسٹرکٹر کو بھی شامل کریں گے۔
public class Cat implements Voice {
   String name;
   String breed;
   int year;

   public Cat(String name, String breed, int year) {
       this.name = name;
       this.breed = breed;
       this.year = year;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getBreed() {
       return breed;
   }

   public void setBreed(String breed) {
       this.breed = breed;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   @Override
   public void talk() {
       System.out.println("meow...");
   }
}
public class Dog implements Voice {
   String name;
   String color;
   int year;

   public Dog(String name, String color, int year) {
       this.name = name;
       this.color = color;
       this.year = year;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getColor() {
       return color;
   }

   public void setColor(String color) {
       this.color = color;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   @Override
   public void talk() {
       System.out.println("WOF WOF");
   }
}
درحقیقت، ہماری کلاسز اور طریقوں پر عمل درآمد بہت ملتا جلتا ہے۔ آئیے وائس سپورٹ کے ساتھ ایک اور کلاس بنائیں، Parrot ۔ اس میں صرف ٹاک () طریقہ مختلف طریقے سے کام کرے گا: صارف کنسول میں ایک تار داخل کرے گا، اور طوطا بات () طریقہ استعمال کرتے ہوئے اسے "دوہرائے گا"۔
import java.util.Scanner;

public class Parrot implements Voice {
   String name;
   String color;
   int year;

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getColor() {
       return color;
   }

   public void setColor(String color) {
       this.color = color;
   }

   public int getYear() {
       return year;
   }

   public void setYear(int year) {
       this.year = year;
   }

   @Override
   public void talk() {
       Scanner scanner = new Scanner(System.in);
       System.out.println("WHat should I repeat after you?...");
       String s =  scanner.nextLine();
       System.out.println(s);
   }
}
اب آئیے ایک ٹیسٹ کلاس بناتے ہیں اور دیکھتے ہیں کہ اگر ہم بتدریج Cat ، Dog اور Parrot کی کلاسوں کی چیزوں کے Talk() طریقہ کو کہتے ہیں تو پروگرام کیا نتیجہ نکالے گا ۔
public class InterfaceDemo {
   public static void main(String[] args) {
       Cat cat = new Cat ("Mewie", "Siam" ,2021);
       cat.talk();
       Dog dog = new Dog("Snoopy", "White and black", 2020);
       dog.talk();
       Parrot parrot = new Parrot();
       parrot.talk();
   }
}
آؤٹ پٹ نیچے ہے۔ گرین ٹیکسٹ کنسول میں پرنٹ کردہ ایک صارف ہے۔
meow... WOF WOF میں آپ کے بعد کیا دہراؤں؟... میں بہت باتونی اور چالاک پرندہ ہوں میں بہت باتونی اور چالاک پرندہ ہوں

پہلے سے طے شدہ طریقے

جاوا میں انٹرفیس کو لاگو کرتے وقت JDK 8 کی ریلیز سے پہلے، ہمیں اس کے تمام طریقوں کو ایک کلاس میں نافذ کرنا پڑتا تھا۔ ایک ہی وقت میں، جاوا انٹرفیس بذات خود کسی مخصوص نفاذ کے بغیر صرف طریقہ کی تعریف پر مشتمل ہو سکتا ہے۔ JDK 8 نئی فعالیت شامل کرتا ہے - پہلے سے طے شدہ طریقے۔ اب جاوا انٹرفیس میں نہ صرف طریقہ کار کی تعریفیں ہو سکتی ہیں بلکہ پہلے سے طے شدہ نفاذ بھی ہو سکتے ہیں۔ وہ استعمال ہوتے ہیں اگر کلاس انٹرفیس کو نافذ کرتی ہے لیکن طریقہ کو نافذ نہیں کرتی ہے۔ مثال کے طور پر، آئیے وائس انٹرفیس میں Talk() طریقہ کو ڈیفالٹ طریقہ میں تبدیل کریں۔ ہم ایک نئی آواز سے چلنے والی بتھ کلاس بھی لکھیں گے جس میں بات کرنے کے طریقہ کار کا نفاذ نہیں ہے ۔
public interface Voice {
   default void talk() {
       System.out.println("I can talk...");
   }
}
public class Duck implements Voice {

   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!!!");
   }

}
اب ہم اپنی ٹیسٹ کلاس کو تھوڑا سا تبدیل کرتے ہیں۔
public class InterfaceDemo {
   public static void main(String[] args) {
       Cat cat = new Cat ("Mewie", "Siam" ,2021);
       cat.talk();
       Dog dog = new Dog("Snoopy", "White and black", 2020);
       dog.talk();
       Duck duck = new Duck();
       duck.talk();
   }
}
آؤٹ پٹ یہاں ہے:
میانو... WOF WOF میں بات کر سکتا ہوں...
دیکھیں۔ کتے اور کیٹ کی کلاسوں کے آبجیکٹ میں ، اوور رائڈ میتھڈ ٹاک () کو کہا جاتا ہے، لیکن بتھ کلاس کے کسی آبجیکٹ میں، انٹرفیس سے طے شدہ طریقہ کہا جاتا ہے۔ اس طرح، ڈیفالٹ طریقہ صرف ایک طریقہ ہے بغیر کسی ترمیم کے اور اسے پہلے سے طے شدہ مطلوبہ الفاظ سے نشان زد کیا جاتا ہے۔ ہمیں کلاس میں پہلے سے طے شدہ طریقہ کو نافذ کرنے کی ضرورت نہیں ہے جو انٹرفیس کو نافذ کرتی ہے، لیکن ہم اسے اوور رائڈ کر سکتے ہیں۔

جامد طریقے

چونکہ JDK 8 جامد طریقے جاوا انٹرفیس میں دستیاب ہیں - وہ کلاس کے طریقوں سے ملتے جلتے ہیں:
interface Voice {

    void talk();

    static void check(){

        System.out.println("checked...");
    }
}
انٹرفیس کے جامد طریقہ کا حوالہ دینے کے لیے، بالکل اسی طرح جیسے کلاسز کے معاملے میں، انٹرفیس کا نام اور طریقہ لکھیں:
public static void main(String[] args) {

    Voice.check();
}

انٹرفیس کا ایک سے زیادہ نفاذ

اگر ہمیں جاوا کلاس میں کئی انٹرفیس لگانے کی ضرورت ہے، تو وہ سب کوما کے ساتھ لفظ کے نفاذ کے بعد درج ہیں :
public class Duck implements Swimmable, Flyable, Voice {

    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