JavaRush /جاوا بلاگ /Random-SD /انٽرفيس ۾ ڊفالٽ طريقا

انٽرفيس ۾ ڊفالٽ طريقا

گروپ ۾ شايع ٿيل
جاوا جو هر نئون نسخو پوئين نسخن کان مختلف آهي. هتي مواد مان تبديلين جو هڪ مثال آهي جيڪو اسان ڍڪي ڇڏيو آهي: Java 5 کان اڳ، enumٻولي ۾ ڪو به نه هو.
انٽرفيس ۾ ڊفالٽ طريقا - 1
ساڳيءَ طرح، جاوا 8 جاوا 7 کان بلڪل مختلف آهي. اسان جا اڪثر ليڪچر ٻوليءَ جي 7 ورجن ۾ لکيل آهن، پر يقيناً، اسان اهم جدت کي نظرانداز نه ڪنداسين. جيئن ته اسان هن ليڪچر ۾ انٽرفيس جي باري ۾ ڳالهائي رهيا آهيون، اچو ته ڏسو هڪ تازه ڪاري - default طريقن in interfaces . توھان اڳ ۾ ئي ڄاڻو ٿا ته ھڪڙو انٽرفيس لاڳو نٿو ٿئي . ان جو ڪم اهو آهي ته اهو بيان ڪرڻ ته ڪهڙو رويو سڀني شين کي لاڳو ڪرڻ گهرجي . پر اڪثر ڪري ڊولپرز کي اهڙين حالتن سان منهن ڏيڻو پوي ٿو جتي سڀني طبقن ۾ هڪ طريقو لاڳو ڪرڻ ساڳيو هو. اچو ته اسان جي پراڻي ڪار جو مثال ڏسو:
public interface Car {

   public void gas();

   public void brake();
}
public class Sedan implements Car {

   @Override
   public void gas() {
       System.out.println("Газ!");
   }

   @Override
   public void brake() {
       System.out.println("Тормоз!");
   }
}


public class Truck implements Car {

   @Override
   public void gas() {
       System.out.println("Газ!");
   }

   @Override
   public void brake() {
       System.out.println("Тормоз!");
   }
}


public class F1Car implements Car {
   @Override
   public void gas() {
       System.out.println("Газ!");
   }

   @Override
   public void brake() {
       System.out.println("Тормоз!");
   }
}
توهان ڇا سوچيو ته هن ڪوڊ سان بنيادي مسئلو آهي؟ توهان شايد محسوس ڪيو آهي ته اسان ساڳئي ڪوڊ جو هڪ گروپ لکيو آهي! اهو مسئلو پروگرامنگ ۾ عام آهي ۽ ان کان بچڻ گهرجي. هڪ ٻي شيء اها آهي ته جاوا 8 جي ڇڏڻ کان اڳ ڪو خاص حل اختيار نه هئا. جڏهن هي نسخو ٻاهر آيو، اهو ممڪن ٿيو ته ڊفالٽ طريقن کي بيان ڪرڻ ۽ انهن کي انٽرفيس جي اندر ئي لاڳو ڪرڻ! هتي اهو ڪيئن ڪيو ويو آهي:
public interface Car {

   public default void gas() {
       System.out.println("Газ!");
   }

   public default void brake() {
       System.out.println("Тормоз!");
   }
}

public class Sedan implements Car {

}

public class Truck implements Car {

}

public class F1Car implements Car {

}
ھاڻي طريقا gas()۽ brake()، جيڪي سڀني مشينن لاء ساڳيا ھئا، انٽرفيس ۾ شامل آھن، ۽ نقل ڪوڊ جي ضرورت نه آھي. ان کان علاوه، طريقا هر ڪلاس ۾ موجود آهن!
public class Main {

   public static void main(String[] args) {

       F1Car f1Car = new F1Car();
       Sedan sedan = new Sedan();
       Truck truck = new Truck();
       truck.gas();
       sedan.gas();
       f1Car.brake();
   }
}
ڇا جيڪڏھن ھڪڙي طريقي سان 100 ڪلاس آھن gas()، پر انھن مان صرف 99 ھڪڙو ساڳيو رويي آھي؟ اهو سڀ ڪجهه برباد ڪري ٿو، ۽ ڊفالٽ طريقو هن معاملي ۾ ڪم نه ڪندو؟ بلڪل نه :) انٽرفيس جا ڊفالٽ طريقا ختم ڪري سگھجن ٿا.
public class UnusualCar implements Car {
   @Override
   public void gas() {
       System.out.println("Эта машина газует по-другому!");
   }

   @Override
   public void brake() {
       System.out.println("Эта машина тормозит по-другому!");
   }
}
ٻيون سڀئي 99 قسم جون مشينون ڊفالٽ طريقي تي عمل ڪنديون، ۽ ڪلاس UnusualCar- استثنا - مجموعي تصوير کي خراب نه ڪندو ۽ آرام سان ان جي رويي کي طئي ڪندو. انٽرفيس ۾ هڪ کان وڌيڪ وراثت جيئن توهان اڳ ۾ ئي ڄاڻو ٿا، جاوا ۾ هڪ کان وڌيڪ وراثت ناهي. ان جا ڪيترائي سبب آهن، جن کي اسين هڪ الڳ ليڪچر ۾ تفصيل سان ڏسنداسين. ٻين ٻولين ۾، مثال طور، C ++ ۾، اهو ٻيو رستو آهي ڀرسان. گهڻن وراثت کان سواء، هڪ سنگين مسئلو پيدا ٿئي ٿو: ساڳئي اعتراض ۾ مختلف خاصيتون ۽ "رويي" ٿي سگهي ٿي. زندگي مان هڪ مثال: اسان جي والدين لاء اسين ٻار آهيون، استادن لاء اسين شاگرد آهيون، ڊاڪٽرن لاء اسين مريض آهيون. زندگي ۾، اسان مختلف ڪردارن ۾ ظاهر ٿيندا آهيون ۽، مطابق، مختلف طريقي سان هلندا آهيون: اسان واضح طور تي استادن سان مختلف دوستن جي ڀيٽ ۾ ڳالهائينداسين. اچو ته هن صورتحال کي ڪوڊ ۾ ترجمو ڪرڻ جي ڪوشش ڪريو. اچو ته تصور ڪريو ته اسان وٽ ٻه طبقا آهن: تالاب ۽ Aviary. هڪ تلاءَ لاءِ توهان کي ترندڙ پکين جي ضرورت آهي، ۽ هڪ aviary لاءِ توهان کي اڏامندڙ پکين جي ضرورت آهي. هن کي ڪرڻ لاء، اسان ٻه بنيادي ڪلاس ٺاهيا - FlyingBird۽ Waterfowl.
public class Waterfowl {
}

public class FlyingBird {
}
ان مطابق، اسان aviary ڏانهن موڪلينداسين انهن پکين کي جن جي طبقن مان ورثي ۾ مليا آهن FlyingBird، ۽ تلاء ڏانهن موڪليا ويندا آهن - جيڪي هيٺان آهن Waterfowl. سڀ ڪجھ سادو لڳي ٿو. پر جيڪڏهن اسان کي بتھ جي سڃاڻپ ڪرڻ جي ضرورت آهي ته اسان ڇا ڪنداسين؟ هوءَ ترڻ ۽ اڏامندي آهي. پر اسان وٽ هڪ کان وڌيڪ وراثت نه آهي. خوشقسمتيء سان، جاوا انٽرفيس جي ڪيترن ئي عملن کي مهيا ڪري ٿو. جيڪڏهن هڪ طبقو ڪيترن ئي والدين کان وارث نه ٿي سگهي، ڪيترن ئي انٽرفيس کي لاڳو ڪرڻ آسان آهي! اسان جي بتھ پرواز ۽ ترڻ ٻنهي ٿي سگهي ٿي :) مطلوب نتيجو حاصل ڪرڻ لاءِ ڪلاس بجاءِ FlyingBirdانٽرفيس استعمال ڪرڻ ڪافي آهي .Waterfowl
public class Duck implements FlyingBird, Waterfowl {

   //методы обоих интерфейсов легко объединяются в одном классе

   @Override
   public void fly() {
       System.out.println("Летим!");
   }

   @Override
   public void swim() {

       System.out.println("Плывем!");
   }
}
انهي جي مهرباني، اسان جو پروگرام لچڪدار طبقي جي انتظام کي برقرار رکي ٿو، ۽ ڊفالٽ طريقن جي عمل سان گڏ، اسان جي شين جي رويي کي بيان ڪرڻ جي صلاحيت تقريبا لامحدود ٿي ويندي آهي! :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION