أيه الفرق بين ال 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 .
أيه مش سامع؟ زهقت من الرغى بتاعى يعم الله يسامحك خلاص هندخل على الاسالة اهو متزقش 

--------------------------------------------------------------------------------------------------------------------------------------
الأسئلة

طب ركز معايا تخيل انت عايز تبعت قيمه افتراضية للمتغير جوا الكلاس دا هتبعتها ازى يبقى هتبعتها لمين لل 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
طبعا هو ليه فوائد تانيه ياريت تدور عليها بنفسك .

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


بالظبط برافو عليك هتخليها final method

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

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



يلا سلاااااام.
Comments
Post a Comment