بسم الله الرحمن الرحيم
والصلاة والسلام على سيدنا
محمد صل الله عليه وسلم
النهارده إن شاء الله هنتكلم عن ال
non access modifier .
-
Non
Access Modifier : وهو عبارة عن :
·
Abstract.
·
Final.
·
Static.
1-
Abstract:
وده عبارة عن keyword ممكن نكتبها قبل ال class or method فقط يعنى ما ينفعش نكتب الكلمة ديه قبل ال variable.
n
Abstract
class :
-
اول لما
نعمل ال Class بتاعتنا abstract على طول نعرف اننا كده مش هنعرف ناخد منها object .
-
ال Abstract class تحتوى على methods عاديه زى ما احنا متعودين وتحتوى أيضاً على Abstract methods .
-
مثال :

-
رقم 1 ديه
ال method اللى احنا متعودين على شكلها .
-
رقم 2 ديه
ال abstract method وديه هنتكلم عن صفاتها بالتفصيل فى الفقره القادمة .
-
مثال آخر :

-
فى المثال
السابق نلاحظ أن البرنامج عامل خطأ لما حاولنا ناخد object من ال abstract class وطلع ال error اللى داخل المربع الأحمر وال error معناه ماينفعش نعمل instantiate (يعنى ناخد object) للنوع test اللى هو اسم ال abstract class .
n
Abstract
Method :
-
لازم عشان
نعمل Abstract method اولاً لازم نكون بنكتبها
داخل Abstract class يعنى ما ينفعش نعمل Abstract
method
داخل class عاديه على طول هيظهر error ويقولنا كده :
-
فى المثال
السابق طلع فى ال error message ان ال Abstract method لازم تكون موجوده داخل Abstract class وبعد كده ظهر لنا خيارين عشان نحل المشكلة
ديه ياإما remove abstract
modifier يعنى ال method تبقى عاديه ونشيل ال Abstract منها ، يا إما test class نخليها abstract class يعنى نضع قبلها كلمه abstract .
-
ال Abstract method لاتحتوى على اى كود عبارة
عن signature فقط زى ما احنا شايفين فى الصورة كده ، أمال هنعمل ايه بيها طالما
مش بتنفذ اى كود ؟؟ سؤال مهم طبعا ، احنا لما نيجى نستخدم ال Abstract class هنستخدمها عن طريق ال inheritance وفى هذه الحالة البرنامج هيجبرنا اننا نكتب
الكود لل abstract method كما فى المثال التالى :
-
ناخد بالنا
اننا استخدمنا test class اللى هى Abstract
class عن طريق ال inheritance واول لما عملنا كده ظهر error وسبب ظهوره ان ال test تحتوى على abstract method وزى ما احنا قولنا ان ال Abstract method لا تحتوى على اى كود يبقى لازم عشان المشكلة تتحل نضغط
على add unimplemented methods هنلاقى ان ال abstract
method ظهرت عندنا فى ال class اللى
هى Mytest وداخلها نقدر نكتب اى كود احنا عايزينه كما فى الصورة التاليه :
-
ده الشكل
اللى هيظهر عندنا فى Mytest class ونقدر نكتب الكود اللى احنا عايزين ننفذه فى ال method .
2-
Final
:
n
أولاً : ال
keyword ديه لما بنكتبها قبل ال Class بيكون معناها ان ال Class ديه مش هنقدر نوّرثها لأى Class تانيه لكن نقدر ناخد object منها
مثال :
-
لو عندنا Shape class وعملناها final كما فى الصورة :
-
ثم خلينا Rectangle Class تورث من ال Shape ، نشوف ايه اللى هيحصل :
-
هنلاقى البرنامج طلّع error لما عملنا extend
Shape
ليه ؟ لأن Shape
عبارة عن final class
وزى ما وضّحنا قبل كده ان اى Class ما ينفعش تورث من final
class
وهو ده اللى هنلاقيه مكتوب فى message error .
n
ثانياً : ال keyword ديه لما
بنكتبها قبل ال attribute ، يصبح ال attribute ده عبارة عن
ثابت (constant)
زى pi=3.14 يعنى ما نقدرش نغير قيمة هذا ال attribute طول ما احنا شغالين فى
البرنامج .
n
ثالثاً : لما نكتبها قبل ال method يبقى معناه
اننا ما نقدرش نعمل override لل method ديه
مثال :
-
فى الصورة السابقه مسحنا كلمه
final من قبل ال class
، كده اصبحت ال class
ممكن اى class
تانيه تورث منها عادى ، بس وضعنا كلمه final قبل ال Area method يبقى اصبحت
هذه ال method
ما ينفعش نعمل ليها override كما فى
الصورة التالية :
-
هنلاقى المرة ديه ال error ظهر واحنا
بنعمل override
ل Area method
وهنلاقى مكتوب فى ال message error الجملة ديه
"cannot override the final method
from shape "
يعنى ما ينفعش نعمل override ل final
method
-
Final ملخص فائدة ال لو عندنا method مش عايزين
اى class
تانيه تعمل override لل method ديه ، او لو عندنا class ومش عايزين
اى class
تانيه تورث منها حاجه ، او لو عندنا attribute ومش عايزينه يتغير طول البرنامج
نعمله final.
3-
Static
:
n
اولاً : لو
كتبناها قبل ال attribute ده معناه ان ال attribute ده خاص بال class وليس لل object يعنى ايه الكلام ده ؟
-
معناه اننا
لو بنعرف attribute عادى مش static
يعنى
فى هذه الحالة ؟ كل ما ناخد object من هذه ال class هيفتح مكان جديد لل
attribute ده فى ال memory مع كل object جديد عشان كده هيكون خاص بال object ، لكن لما نعمله static attribute هيتفتح مكان واحد بس لل attribute ده فى ال memory واى object هناخده من ال Class ديه هيشوف نفس المكان بتاع ال attribute ده ،وده معناه اننا لو
غيرنا فى قيمة هذا ال static attribute التغيير ده هيشوفه كل ال objects عشان كده اصبح ال Attribute خاص بال class لانه بيتفتحلة مكان واحد بس فى ال memory وليس خاص بال object يعنى
مش بيتفتح مكان جديد لل Attribute ده مع كل object .
-
ازاى
نتعامل مع ال static attribute :
مثال : لو
عندنا static attribute واسمة num كما فى الصورة :
-
ازاى
نتعامل معاه ؟؟ كما فى الصورة التالية :
-
عشان نتعامل مع ال static
attribute
مش بنحتاج ناخد object من ال Class وبعد كده نكتب objectname.attribute لا نتعامل بهذه الطريقه مع ال static
attribute لاننا عرفنا خلاص انه خاص بال class مش بالobject
، فعشان نتعامل معاه بنكتب Class
name.attribute name
كما فى الصورة السابقة .
n
ثانياً : لو كتبناها قبل ال method يبقى لازم
ناخد بالنا من النقاط التالية :
1-
لما نستخدم ال static method برده
هنستخدمها زى ال static attribute ازاى يعنى ؟؟
نكتب Class name.method name .
2-
داخل ال Static method ال Attributes
اللى هستخدمها لازم تبقى حاجه من اتنين يا إما static
attribute
يا اما variables
عاديه بس لازم تكون مُعرفة داخل ال method ، يعنى ما ينفعش variable عادى يكون متعرف على مستوى ال class واستخدمه
داخل ال static method ، لو متعرف على مستوى ال class يبقى لازم
يكون static attribute
عشان نستخدمه داخل ال static method ، او زى ما قولنا يكون variable عادى بس متعرف
داخل ال static method
3-
داخل الstatic method
ما نقدرش نستخدم method عاديه إلا
لما ناخد الاول object
من ال class
اللى تحتوى على ال method
ديه وكل ده داخل ال static method
، او ممكن نستخدم static method داخل ال static method بتاعتنا .
مثال :

-
لو خدنا بالنا عشان نستخدم ال sum
method
داخل ال sub خدناه object من ال Class نفسها ليه ؟عشان
ال sub
عبارة عن static method واحنا مش هنقدر نستخدم method عاديه داخل ال static
method
إلا لما ناخد الاول object
من ال class
حتى لو كانوا الاتنين methods
فى نفس ال class
-
مثال أخر :
-
ده نفس المثال السابق بس غيرنا فيه حاجه
بسيطه بس الحاجه ديه عملت فرق؟؟ ايه هى الحاجه ديه ؟؟ خلينا ال sum
method
بقيت static ، فلما بقيت static بقينا قادرين
اننا نستخدمها عادى داخل ال sub method من غير ما ناخد object
من ال class .
بكده نكون خلصنا ال non access
modifier ، ندخل بقه على آخر جزء هناخده فى ال java هو ال interface .
·
ما هو ال interface ؟؟
1-
مبدئياً هو
مش class لكنه يحتوى على methods وهذه ال methods لا تحتوى على كود يعنى لما
نستخدم اى ال interface لازم نعمل override لل methods اللى فيه لانها كلها لا
تحتوى على كود عبارة عن methods signature فقط .
2-
لا تحتوى
على attributes إلا لو كان نوعه static
final attribute ، بس غالباً مش بنستخدم فيها attributes
3-
ال interface عبارة عن contract
4-
مثال :
عشان نفهم ايه هو ال interface ده :
-
ديه طريقه
تعريف ال interface نعمل right click على ال project ونختار new interface
- وده هيكون شكل ال interface وديه طريقة كتابة ال methods فيه signatures بس .
- ازاى نقدر نستخدم ال interface ده :
- اولاً هنروح على اى class عايزين نستخدم فيها ال interface بتاعنا ونكتب جنب ال class من فوق implements وديه معناها اننا هنستخدم interface ثم بعد كده نكتب ال interface name ، اول ما نعمل كده هنلاقى علامه حمراء تحت ال class وهيظهر ال error message ديه والمقصود منها اننا نضعط على ال unimplemented methods عشان نعمل override لل methods اللى موجوده فى ال interface كما فى الشكل التالى :
-
ثم نكتب داخل كل method الكود اللى
احنا عايزينه.
-
من مميزات ال interface ان احنا
ممكن نعمل implements
لأكثر من interface
يعنى مش زى ال inheritance
بنعمل extends
ل class واحدة ،يعنى
ما نقدرش نورث من اكتر من class ، وبنعمل implements لأكتر من interface كالتالى :
public class test implements
interface1,interface2{
}
-
المقصود من شرح ال interface هو فهم ال concept نفسه لكن
اثناء التطيبق الفعلى احنا مش هنعمل interface في الاندرويد ، احنا هنستخدمه فقط فلازم
نفهم قصة ال interface
من أولها ازاى نعمله وازاى نستخدمه .
-
وبكده بكون خلصنا درس النهارده وخلصنا كمان
الجزء الخاص بالجافا يارب تكونوا استفدوا وذاكروا كويس واستعدوا عشان ان شاء الله
الدرس القادم هيكون بداية الأندرويد
السلام عليكم ورحمة الله
وبركاته
No comments:
Post a Comment