abstract class vs interface شرح

 أيه الفرق بين ال abstract & interface وامتى استخدم كل واحد منهم ؟





دردشة

زى ما اتعودنا احنا بناقش البوستات اللى شبه دى من وجه نظر شخص بيعملك انترفيو مش بنشرحها بس قبل ما نشوف الأسالة اللى ممكن تتسأل فى انترفيو خلينا نبص بصه على المفهوم سريعا.

--------------------------------------------------------------------------------------------------------------------------------------

interface

اسلوب بيحقق ليك ال abstraction من خلال انك بتبنى ميثود من غير body
خلينى بس اقولك معلومة غير انك تعمل override للميثود اللى جواه.
طبعا انت عارف ان الجافا مش بتدعم multiple inheritance عكس لغه زى ال c++ مثلا بمعنى انك مينفعش تورث كلاس X من A , B يعنى مينفعش يرث من 2 كلاس طب الحل ؟
الانترفيس طبعا يا باشا هو الحل وتعالى نشوف مثال بدل الرغى دا 😅

 interface AnimalEat {  
   void eat();  
 }  
 interface AnimalTravel {  
   void travel();  
 }  
 class Animal implements AnimalEat, AnimalTravel {  
   public void eat() {  
    System.out.println("Animal is eating");  
   }  
   public void travel() {  
    System.out.println("Animal is travelling");  
   }  
 }  
يبقا كدا حلينا المشكله كفايه المقدمه دى للانترفيس😅


--------------------------------------------------------------------------------------------------------------------------------------
abstract
نفس فكره الفكره بس ال interface كان لازم يحقق جزئية ال abstract بنسبه 100% لكن هنا مش شرط ليه how ?😂
لان ممكن جوا كلاس ال abstract ممكن تبنى ميثود ليها body عادى وطبعا انت عارف ان مينفعش يكون instantiated .
أيه مش سامع؟ زهقت من الرغى بتاعى يعم الله يسامحك خلاص هندخل على الاسالة اهو متزقش 😔

--------------------------------------------------------------------------------------------------------------------------------------
الأسئلة
📌 خلينى أسألك واقولك اية اللى يخلينى اعمل constructors فى كلاس abstract طالما انت قولت انه مش instantiated او مش بتاخد من اوبجيكت يعنى ؟
طب ركز معايا تخيل انت عايز تبعت قيمه افتراضية للمتغير جوا الكلاس دا هتبعتها ازى يبقى هتبعتها لمين لل constructor بتاعه طيب مش انت عامل كلاس ال abstract لكلاس تانى هيورث منه اللى هو derived يبقى انا من خلال الكلاس التانى دا هبعت القيمه الافتراضيه لل constructor تعالى لمثال احسن.
 // 1-abstract class   
 public abstract class AbstractClass  
 {  
  static String username;  
  public AbstractClass(String username){  
  this.username = username  
  }  
  public abstract int getValue(int num);  
 }  
 // 2-derived class  
 public class DerivedClass extends AbstractClass  
 {  
  public DerivedClass(String initial_username){  
  super(initial_username)  
  }  
  @Override  
  public int getValue(int num){  
  return num;  
  }  
 }  
هنا كلاس derived تقدر تاخد منه اوبجيكت فتقدر تحط للكونستركتور بتاعه قيمه اللى بدوره باعتها لكونستركتور كلاس abstract اللى وارث منه ان شاء الله تكون وصلت ليه ممكن اعمل constructor مش instantiated
طبعا هو ليه فوائد تانيه ياريت تدور عليها بنفسك .

📌عندى كلاس ومش عايزه يعمل override لكل الميثود هتعمل ايه؟
شوف الجمال بقا لو أنت عملت interface فيه 5 ميثود وخليت الكلاس بتاعك اللى بيعمله implement يكون abstract يبقا أنت هتعمل override للميثود اللى تعجبك لان اصلا الانترفيس abstract وطبعا عشان انت شاطر ومذاكر البوستات اللى قبل كدا عندك حل تانى 😅

📌 طيب تعمل ايه لو فيه ميثود جوا كلاس abstract عايز محدش يقدر يعملها override وتتنفذ زى ما هى ؟
بالظبط برافو عليك هتخليها final method

📌 طيب هل انا اقدر اعرف متغير فى كلاس ال interface وهياخد access modifier .
ايو تقدر تكتب جوا الانترفيس متغير بس لازم يكون public حتى لو مكتبتش جنبه هيكون public .
- استنى لسا الاجابه مخلصتش نسيت اقولك ان من اول java 9 تقدر تعرف متغيرات نوعها private

--------------------------------------------------------------------------------------------------------------------------------------
⛔️الى اللقاء
انا حاولت اغطى اهم النقط وعشان البوست ميبقاش طويل اكتر من كدا لو حط عايز يضيف حاجه فى الجزء دا ممكن يسيبها فى الكومنتات عشان نستفيد بيها .
بس كدا انا خلصت عندكوا اى تعليقات او اضافه ياريت تعرفونا ومتنساش تعمل لايك وشير وصبصكرايب معلش اندمجت شويه😍😍
يلا سلاااااام.

Comments