جافا الموجهة نحو الكائنات: هنا نقوم بتنظيم المعرفة الأساسية الموجه نحو الكائن لمساعدة الجميع على التعلم والفهم. آمل أن يساعد الجميع. فيما يلي المعرفة ذات الصلة التي تم تجميعها بناءً على معلومات مقابلة الشركة:
الفرق بين التحميل الزائد والتجاوز. هل يمكن للطريقة الزائدة تغيير نوع قيمة الإرجاع؟
الحمل الزائد يعني الحمل الزائد ، والتجاوز يعني الكتابة فوق ، أي إعادة كتابة. الحمل الزائد يعني أنه يمكن أن يكون هناك طرق متعددة تحمل نفس الاسم في نفس الفئة ، ولكن قوائم المعلمات من هذه الأساليب مختلفة (أي أن رقم أو نوع المعلمات مختلف).
تعني إعادة الكتابة تعني أن الطريقة في الفئة الفرعية يمكن أن تكون بالضبط نفس اسم ومعلمات الطريقة في الفئة الأصل. عندما يتم استدعاء هذه الطريقة من خلال كائن المثيل الذي تم إنشاؤه بواسطة الفئة الفرعية ، سيتم استدعاء طريقة التعريف في الفئة الفرعية ، وهو ما يعادل الكتابة فوق الطريقة نفسها المحددة في الفئة الأصل. هذا هو أيضا مظهر من مظاهر تعدد الأشكال للبرمجة الموجهة للكائن.
يمكن ترجمة التجاوز كتجاوز. كما تعرف حرفيًا ، فهي تتجاوز طريقة وإعادة كتابتها من أجل تحقيق وظائف مختلفة. التجاوز الأكثر دراية بالنسبة لنا هو تنفيذ أساليب الواجهة. في واجهة ، يتم الإعلان عن الطريقة بشكل عام ، وعندما ننفذها ، نحتاج إلى تنفيذ جميع طرق إعلان الواجهة. بالإضافة إلى هذا الاستخدام النموذجي ، قد نقوم أيضًا بتجاوز الأساليب في فئة الأم في الميراث. يجب الانتباه إلى النقاط التالية أثناء التغطية:
1. يجب مطابقة شعار طريقة التراكب تمامًا مع شعار طريقة التراكب من أجل تحقيق تأثير التراكب ؛
2. يجب أن تكون قيمة إرجاع الطريقة المكتوبة فوقها متسقة مع إرجاع الطريقة المكتوبة ؛
3. يجب أن يكون الاستثناء الذي تم إلقاؤه بواسطة الطريقة المكتوبة ثابتًا مع الاستثناء الذي تم إلقاؤه بواسطة الطريقة المكتوبة ، أو أنه فئة فرعية ؛
4. لا يمكن أن تكون الطريقة المكتوبة بشكل خاص ، وإلا يتم تعريف طريقة جديدة فقط في فئتها الفرعية ولا يتم كتابتها فوقها.
يمكن ترجمة التحميل الزائد على أنه التحميل الزائد ، مما يعني تحديد بعض الطرق بنفس الاسم ، وتمييز هذه الطرق عن طريق تحديد معلمات الإدخال المختلفة ، ثم عند استدعاء ، سيقوم VM بتحديد الطريقة المناسبة للتنفيذ وفقًا لأنماط المعلمات المختلفة. عند استخدام التحميل الزائد ، يرجى الانتباه إلى النقاط التالية:
1. عند استخدام التحميل الزائد ، يمكنك فقط تمرير أنماط معلمات مختلفة. على سبيل المثال ، يجب أن تكون أنواع المعلمات المختلفة ، وعدد مختلف من المعلمات ، وأوامر المعلمات المختلفة (بالطبع ، العديد من أنواع المعلمات في نفس الطريقة مختلفة ، على سبيل المثال ، يمكن أن تكون ممتعة (int ، float) ، ولكن لا يمكن أن تكون ممتعة (int ، int)) ؛
2. لا يمكن تحميلها من خلال أذونات الوصول وأنواع الإرجاع والاستثناءات التي تم طرحها ؛
3. لن يؤثر نوع الاستثناء وعدد الطرق على التحميل الزائد ؛
4. للميراث ، إذا كانت الطريقة لها حقوق وصول في فئة الأصل وهي priavte ، فلا يمكن تحميلها في الفئة الفرعية. إذا تم تعريفه ، فإنه يحدد طريقة جديدة فقط ولن يحقق تأثير التحميل الزائد.
إذا كانت قائمة المعلمات للعديد من الطرق المحملة مختلفة ، فقد تكون أنواع العائدين مختلفة. إذا كانت قائمة المعلمات للطريقتين هي نفسها تمامًا ، فلا يمكن تحقيق التحميل الزائد من خلال قيم الإرجاع المختلفة. يمكننا استخدام طريقة الإثبات العكسي لتوضيح هذه المشكلة. على سبيل المثال ، عندما ندعو إلى طريقة map.remove (مفتاح) ، على الرغم من أن طريقة الإزالة لها قيمة إرجاع ، فإننا عادة لا نحدد المتغير الذي يتلقى نتيجة الإرجاع. في هذا الوقت ، على افتراض أن هناك طريقتين في هذه الفئة مع نفس الاسم وقائمة المعلمات بالضبط ، لمجرد أن نوع الإرجاع مختلف ، لا يمكن لـ Java تحديد الطريقة التي يريد المبرمج الاتصال بها ، لأنه لا يمكن الحكم عليه من خلال إعادة نوع النتيجة.
هل يمكن تجاوز المُنشئ؟
لا يمكن مورث مُنشئ المنشئ ، لذلك لا يمكن تجاوز التجاوز ، ولكن يمكن زيادة التحميل الزائد.
هل يمكن أن يتم مورث الواجهة؟ هل يمكن لفئة مجردة أن تنفذ واجهة؟ هل يمكن لفئة تجريدية أن ترث فئة ملموسة؟ هل يمكن أن توجد فئة مجردة؟ هل يمكن للطبقة المجردة أن يكون لها طريقة رئيسية ثابتة في فصل تجريدي؟
الواجهات يمكن أن ترث واجهات. يمكن للفصول التجريدية تنفيذ واجهات (الأطراف). يمكن أن يكون هناك طرق رئيسية ثابتة في الفصول التجريدية.
الفرق الوحيد بين الفئات التجريدية والفئات العادية هو أنه لا يمكنها إنشاء كائنات مثيل والسماح بأساليب مجردة.
عند كتابة طريقة clone () ، عادة ما يكون هناك سطر من التعليمات البرمجية. ما هذا؟
طريقة clone () هي الاستنساخ ، مما يعني نسخ الكائن ؛ أي أنه يوجد بالفعل كائن أ ، حيث يحتوي A على بعض القيم الصالحة ، ولكن إذا كنت ترغب في الحصول على كائن B ، ولن تؤثر أي تغييرات على B على القيمة في A ، ولكن B ليس كائنًا جديدًا جديدًا.
نسخ: ① كائن النسخ يعيد كائن جديد ، وليس مرجعًا. ② الفرق بين نسخ كائن والكائن الذي يتم إرجاعه مع المشغل الجديد هو أن النسخة تحتوي بالفعل على معلومات الكائن الأصلي ، بدلاً من المعلومات الأولية للكائن.
استنساخ لديه سلوك افتراضي ، super.clone () ؛ لأنه أولاً ، يجب نسخ الأعضاء في الفصل الأصل في مكانهم ، ثم يتم نسخ أعضاءها.
ما هي جوانب الميزات الموجهة للكائنات
تتضمن لغات البرمجة الموجهة نحو الكائنات أربع ميزات رئيسية: التغليف والميراث والتجريد وتعدد الأشكال.
1 الحزمة:
التغليف هو أساس ضمان أن مكونات البرمجيات لها وحدات ممتازة. الهدف من العبوة هو تحقيق "تماسك عالٍ وانخفاض اقتران" لمكونات البرامج لمنع التغييرات الناجمة عن ترابط البرنامج. في لغات البرمجة الموجهة للكائنات ، تعد الكائنات هي الوحدة الأساسية للتغليف ، كما أن التغليف الموجهة للكائنات أكثر وضوحًا وأكثر قوة من تغليف اللغة التقليدي. التغليف الموجهة للكائن هو تغليف الكود الذي يصف خصائص وسلوك كائن في "وحدة" ، أي في فئة. يتم تعريف الخصائص بواسطة المتغيرات ويتم تحديد السلوك بالطرق. يمكن للطريقة الوصول مباشرة إلى الخصائص في نفس الكائن. بشكل عام ، فقط تذكر أن تضع المتغير وطريقة الوصول إلى هذا المتغير معًا ، وتحديد جميع متغيرات الأعضاء في فئة خاصة ، ولا يمكن إلا للأساليب الخاصة بالفئة الوصول إلى متغيرات الأعضاء هذه ، والتي تنفذ أساسًا تغليف الكائن. فهم مبدأ: ضع الأساليب والطرق ذات الصلة التي تعمل على نفس الشيء في نفس الفئة ، ووضع الأساليب والبيانات التي تعمل على نفس الفئة.
2. الملخص:
يتمثل التجريد في معرفة أوجه التشابه والموضوعات المشتركة لبعض الأشياء ، ثم تصنيفها إلى فئة لا تنظر إلا في أوجه التشابه والموضوعات المشتركة في هذه الأشياء ، وتتجاهل الجوانب التي لا تتعلق بالموضوع الحالي والهدف ، والتركيز على الجوانب المتعلقة بالهدف الحالي. على سبيل المثال ، رؤية النملة والفيل ويمكنك أن تتخيل ما هي عليه ، وهذا هو التجريد. يتضمن التجريد جانبين: التجريد السلوكي وتجريد الحالة. على سبيل المثال ، حدد فئة الشخص على النحو التالي:
فئة شخص {اسم السلسلة ؛ عمري } البشر في الأصل أشياء معقدة للغاية ولديهم العديد من الجوانب ، ولكن لأن النظام الحالي يحتاج فقط إلى فهم اسم وعمر الشخص ، فإن الفئة المحددة أعلاه تحتوي فقط على سمات الاسم والعمر. هذا تجريد. يمكن أن يؤدي استخدام التجريد إلى تجنب النظر في بعض التفاصيل التي لا تتعلق بالهدف.
3. الميراث:
عند تحديد فئة وتنفيذها ، يمكن القيام به استنادًا إلى فئة موجودة ، ويتم اعتبار المحتوى المحدد من قبل الفئة الحالية محتوى خاص به ، ويمكن إضافة العديد من المحتوى الجديد ، أو يمكن تعديل الطريقة الأصلية لجعلها أكثر ملاءمة لذوي الاحتياجات الخاصة. هذا هو الميراث. الميراث هو آلية تشترك فيها الفئات الفرعية تلقائيًا بيانات وطرق فئة الأصل. هذه علاقة بين الفئات ، مما يحسن من قابلية إعادة الاستخدام وقابلية التوسع في البرمجيات.
4 أشكال متعددة:
يشير تعدد الأشكال إلى النوع المحدد الذي أشار إليه المتغير المرجعي المحدد في البرنامج ، ولا يتم تحديد مكالمات الطريقة الصادرة من خلال المتغير المرجعي أثناء البرمجة ، ولكن يتم تحديدها أثناء تشغيل البرنامج ، أي ما لا يمكن تحديد كائن مثيل الفصل الدراسي ، ويتم تنفيذ متغير مرجعي ، وأي طريقة الفئة التي تصدرها المتغير المرجعي لا يمكن تحديدها إلا أثناء تشغيل البرنامج. نظرًا لأن الفئة المحددة يتم تحديدها فقط عند تشغيل البرنامج ، يمكن أن تكون المتغيرات المرجعية مرتبطة بتطبيقات فئة مختلفة مختلفة دون تعديل رمز البرنامج ، مما يؤدي إلى طريقة محددة لتغيير المكالمة المرجعية وفقًا لذلك. أي أن الكود المحدد المرتبط بالبرنامج يتم تشغيله دون تعديل رمز البرنامج ، بحيث يمكن للبرنامج تحديد حالات تشغيل متعددة ، وهي تعدد الأشكال. تعدد الأشكال يعزز المرونة وقابلية التوسع في البرنامج. على سبيل المثال ، فإن userDao في الكود التالي عبارة عن واجهة تحدد كائن المثيل المشار إليه بواسطة المتغير المرجعي userDao ويتم إرجاعه بواسطة daofactory.getdao () عند تنفيذها. في بعض الأحيان يشير إلى تنفيذ userJDBCDAO ، وأحيانًا يشير إلى تنفيذ userhibernatedao. وبهذه الطريقة ، يمكنك تغيير تطبيق الفئة المحددة التي أشار إليها UserDao دون تعديل الكود المصدري ، مما يؤدي إلى رمز محدد لطريقة userDao.insertUser () يتغير أيضًا وفقًا لذلك. أي في بعض الأحيان يطلق عليه طريقة insertuser لـ userJDBCDAO ، وأحيانًا يطلق عليها طريقة usertuser لـ userhibernatedao:
userDao userDao = daOfActory.getDao () ؛ userDao.insertuser (المستخدم) ؛
ما هي آلية تنفيذ تعدد الأشكال في جافا؟
يمكن أن يشير المتغير المرجعي المحدد بواسطة الفئة أو الواجهة الأصل إلى كائن المثيل لفئة تنفيذ الفئة الفرعية أو الخرسانة ، والطريقة التي يطلق عليها البرنامج مرتبطة ديناميكيًا أثناء وقت التشغيل. هذه هي الطريقة التي تشير إلى كائن المثيل المحدد الذي أشار إليه المتغير ، أي طريقة الكائن الذي يتم تشغيله في الذاكرة ، بدلاً من الطريقة المحددة في نوع المتغير المرجعي.
ما هو الفرق بين الطبقة التجريدية والواجهة؟
فئة تحتوي على المعدل التجريدي هو فئة مجردة ، كائن مثيل لا يمكن إنشاؤه بواسطة فئة مجردة. يجب تعريف الفصول التي تحتوي على أساليب مجردة على أنها فئة مجردة ، ولا يجب أن تكون الأساليب في فئات الصف المجردة مجردة. يجب تنفيذ تعريف الأساليب التجريدية في فئة الفئة التجريدية في الفئة الفرعية الملموسة ، لذلك لا يمكن أن يكون هناك منشئون مجردين أو طرق ثابتة تجريدية. إذا كانت الفئة الفرعية لا تنفذ جميع الأساليب المجردة في فئة الوالدين المجردة ، فيجب أيضًا تعريف الفئة الفرعية على أنها النوع التجريدي.
يمكن القول أن الواجهة هي حالة خاصة لفئة مجردة ، ويجب أن تكون جميع الطرق في الواجهة مجردة. يتعرف تعريف الطريقة في الواجهة على نوع الملخص العام ، ونوع متغير العضو في الواجهة الافتراضية إلى النهائي الثابت العام.
الفرق النحوي بين الاثنين:
1. يمكن أن يكون للطبقات التجريدية طرق بناء ، ولكن ليس في واجهات.
2. يمكن أن يكون هناك متغيرات عادية الأعضاء في الفصول التجريدية ، ولكن لا توجد متغيرات عضو عادية في الواجهة.
3. يمكن أن تحتوي الفئات المجردة على طرق عادية غير مجردة. يجب أن تكون جميع الطرق في الواجهة مجردة ولا يمكن أن تكون هناك طرق عادية غير متجانسة.
4. يمكن أن تكون أنواع الوصول إلى الأساليب المجردة في الفئات التجريدية عامة ومحمية و (النوع الافتراضي ، على الرغم من عدم وجود خطأ في Eclipse ، ولا ينبغي أن تعمل) ، ولكن الأساليب المجردة في الواجهة يمكن أن تكون من النوع العام فقط ، والافتراضي هو النوع التجريدي العام.
5. يمكن أن تحتوي الفئات المجردة على طرق ثابتة ، ولكن لا يمكن أن تحتوي الواجهات على طرق ثابتة.
6. يمكن أن تحتوي كل من الفئات والواجهات المجردة على متغيرات عضو ثابتة. يمكن أن يكون نوع الوصول إلى متغيرات الأعضاء الثابتة في الفئات التجريدية تعسفيًا ، ولكن يمكن أن تكون المتغيرات المحددة في الواجهة هي النوع النهائي الثابت العام فقط ، والافتراضي هو النوع النهائي الثابت العام.
7. يمكن للفئة تنفيذ واجهات متعددة ، ولكن يمكن أن ترث فئة مجردة واحدة فقط.
الفرق بين الاثنين في التطبيق:
تلعب الواجهات دورًا في أساليب تصميم بنية النظام ، وتستخدم بشكل أساسي لتحديد عقود الاتصال بين الوحدات النمطية. تلعب الفئات التجريدية دورًا في تنفيذ التعليمات البرمجية ويمكنها إدراك إعادة استخدام الكود. على سبيل المثال ، نمط تصميم طريقة القالب هو تطبيق نموذجي للفئات التجريدية. على افتراض أن جميع فئات Servlet في مشروع معين يجب أن تستخدم نفس الطريقة لإصدار أحكام الإذن ، وسجلات الوصول إلى سجلات وسجلات التعامل مع الاستثناءات ، يمكنك تحديد فئة أساسية مجردة ، بحيث يمكن لجميع servlets أن ترث هذه الفئة الأساسية التجريدية ، وإكمال الأحكام الكاملة للذات ، وسجلات الوصول إلى السجلات ، والتعامل مع الاستثناءات في طريقة الخدمة في الفئة الأساسية التجريدية ، وإكمال فقط أندات المسحات التجارية ذات الصلة. الرمز الزائف كما يلي:
يمتد فئة الفئة التجريدية العامة المجردة ، وتوسيع نطاق خدمة httpservlet {public final void service (httpservletrequest request ، httpservletresponse) رمي ioexcetion ، servletexcept {سجل سجل للحصول على الإذن إذا كان بإذن) {try {doservice (request ، response) ؛ Doservice (طلب httpservletrequest ، استجابة httpservletresponse) يلقي ioexcetion ، servleTexception ؛ // لاحظ أن إذن الوصول يتم تعريفه على أنه محمي ، والذي يبدو احترافيًا وصارمًا على حد سواء ، لأنه} فئة عامة myServlet1 يمتد Baseservlet {محمية void doservice (httpservletrequest طلب ، httpservletsponsجزء معين من التعليمات البرمجية في منتصف طريقة الفئة الأصل غير مؤكد ، لذلك أتركه للفئة الفرعية ، لذلك أستخدم طريقة القالب لتصميم النمط.
هل يمكن أن تكون طريقة التجريد ثابتة في نفس الوقت ، هل يمكن أن تكون أصلية في نفس الوقت ، وهل يمكن مزامنتها في نفس الوقت؟
لا يمكن أن تكون طريقة الملخص ثابتة ، لأنه يجب تنفيذ الأساليب المجردة بواسطة الفئات الفرعية ، ولا علاقة ثابتة بالفئات الفرعية!
تعني الطريقة الأصلية أن الطريقة يجب تنفيذها بلغة برمجة أخرى تعتمد على النظام الأساسي ، ولا توجد مشكلة في تنفيذ الفئة الفرعية ، لذلك لا يمكن أن تكون مجردة ولا يمكن خلطها مع الملخص. على سبيل المثال ، يجب التعامل مع فئة FileOutputSteam مع الأجهزة ، ويستخدم التنفيذ الأساسي تطبيقات API المتعلقة بنظام التشغيل. على سبيل المثال ، يتم تنفيذها بلغة C في Windows. لذلك ، بالنظر إلى الكود المصدري لـ JDK ، يمكنك أن تجد أن تعريف الطريقة المفتوحة لـ FileOutputStream كما يلي: Private Void Open (اسم السلسلة) يلقي FileNotfoundException ؛
إذا أردنا استخدام Java للاتصال بوظيفة لغة C التي كتبها الآخرون ، فلا يمكننا تسميتها مباشرة. نحتاج إلى كتابة وظيفة لغة C وفقًا لمتطلبات Java ، وسوف تستدعي وظيفة C Language وظائف لغة الآخرين. نظرًا لأن وظيفة C Language مكتوبة وفقًا لمتطلبات Java ، يمكن توصيل وظيفة لغة C الخاصة بنا بـ Java. طريقة الإرساء على Java هي تحديد الطريقة المقابلة لوظيفة C. لا تحتاج الأساليب المقابلة في Java إلى كتابة رمز معين ، ولكن يجب الإعلان عن الأصلي في وقت سابق.
لمزامنة ، كائن قفل المزامنة المستخدمة بواسطة المزامنة المتزامنة على الطريقة هو ذلك ، ولا يمكن للطريقة المجردة تحديد ماهية هذا.
ما هي الطبقة الداخلية؟ الطبقة المتداخلة الثابتة تختلف عن الطبقة الداخلية.
الطبقة الداخلية هي فئة محددة داخل الفصل. لا يمكن تعريف الأعضاء الثابتة في فئة داخلية. الأعضاء الثابتون ليسوا خصائص كائن. إنهم فقط بحاجة إلى إيجاد مكان للعيش فيه ، لذلك يجب وضعهم في فصل. يمكن للفئة الداخلية الوصول مباشرة إلى متغيرات الأعضاء في الفئة الخارجية. يمكن تعريف الفئة الداخلية خارج طرق الفئة الخارجية أو في هيئة الفئة الخارجية ، كما هو موضح أدناه:
الفئة العامة الخارجي {int out_x = 0 ؛ طريقة الفراغ العام () {inner1 inner1 = new Inner1 () ؛ الفئة العامة inner2 // الفئة الداخلية المحددة داخل Method Body {public method () {out_x = 3 ؛ }} inner2 inner2 = new Inner2 () ؛ } الفئة العامة inner1 // الفئة الداخلية المحددة خارج جسم الطريقة {}} يمكن أن تكون أنواع الوصول إلى الفئة الداخلية المحددة خارج الطريقة الخاصة بالجسم العام والمحمي والافتراضي. هذا يشبه متغيرات الأعضاء المحددة في الفصل 4 أنواع وصول ، والتي تحدد ما إذا كان تعريف الفئة الداخلية مرئيًا لفئات أخرى. في هذه الحالة ، يمكننا أيضًا إنشاء كائن مثيل للفئة الداخلية في الخارج. عند إنشاء كائن مثيل للفئة الداخلية ، يجب أولاً إنشاء كائن مثيل للفئة الخارجية ، ثم نستخدم كائن المثيل للفئة الخارجية لإنشاء كائن مثيل للفئة الداخلية. الرمز كما يلي:
الخارجي الخارجية = جديد OUTER () ؛
outer.inner1 inner1 = outer.new Innner1 () ؛
لا يمكن أن يكون هناك معدلات نوع الوصول قبل تحديد الفئة الداخلية داخل الطريقة ، تمامًا مثل المتغيرات المحلية المحددة في الطريقة ، ولكن يمكن استخدام المعدلات النهائية أو التجريدية قبل الفئة الداخلية. هذه الفئة الداخلية غير مرئية لفئات أخرى ولا يمكن الرجوع إلى هذه الفئة الداخلية ، ولكن يمكن نقل كائنات المثيل التي أنشأتها هذه الفئة الداخلية إلى فئات أخرى للوصول. يجب تحديد هذا النوع من الفئة الداخلية أولاً ثم استخدامه ، أي أن رمز تعريف الفئة الداخلية يجب أن يظهر قبل استخدام الفئة ، وهو نفس المبدأ الذي يجب تحديد المتغيرات المحلية في الطريقة أولاً ثم استخدامه. يمكن لهذه الفئة الداخلية الوصول إلى المتغيرات المحلية في هيئة الطريقة ، ولكن يجب إضافة المعدل النهائي قبل المتغير المحلي.
في هيئة الطريقة ، يمكن استخدام بناء الجملة التالي لإنشاء فئة داخلية مجهولة المصدر ، أي مع تحديد واجهة أو فئة فرعية معينة لفئة ، يتم إنشاء كائن مثيل للكاسورة الفرعية دون تحديد اسم الفئة الفرعية:
الفئة العامة {public void start () {new thread (new Runable () {public void run () {} ؛}). start () ؛ }} أخيرًا ، يمكنك بادئة الفئة الداخلية المحددة خارج الطريقة لإضافة الكلمة الرئيسية الثابتة إلى الفئة المتداخلة الثابتة. لم يعد لديه خصائص الطبقة الداخلية. كل شيء ، بالمعنى الضيق ، ليس الطبقة الداخلية. لا تختلف الطبقة المتداخلة الثابتة في سلوك ووظيفة الفئات العادية في وقت التشغيل ، ولكن هناك بعض الاختلافات في بناء الجملة عند مراجع البرمجة. يمكن تعريفه على أنه أنواع عامة ومحمية وافتراضية وخاصة وأنواع أخرى ، في حين لا يمكن تعريف الفئات العادية إلا بأنها أنواع عامة وافتراضية. اسم فئة الفئة المتداخلة الثابتة خارج "اسم الفئة الخارجية. اسم الفئة". يمكنك إنشاء فئة متداخلة ثابتة مباشرة دون إنشاء كائن مثيل لفئة خارجية في الخارج. على سبيل المثال ، إذا كان Inner عبارة عن فئة متداخلة ثابتة محددة في الفئة الخارجية ، فيمكنك استخدام العبارة التالية لإنشاء الفئة الداخلية:
outer.inner inner = new Outer.inner () ؛
نظرًا لأن الفئة المتداخلة الثابتة لا تعتمد على كائنات مثيل من الفئات الخارجية ، يمكن للفئة المتداخلة الثابتة الوصول إلى متغيرات الأعضاء غير القتالية للفئات الخارجية. عند الوصول إلى فئة متداخلة ثابتة في فئة خارجية ، يمكنك استخدام اسم الفئة المتداخلة الثابتة مباشرة دون إضافة اسم الفئة الخارجية. في فئة متداخلة ثابتة ، يمكنك أيضًا الرجوع مباشرة إلى متغيرات الأعضاء الثابتة للفئة الخارجية دون إضافة اسم الفئة الخارجية.
الفئة الداخلية المحددة في طريقة ثابتة هي أيضًا فئة متداخلة ثابتة. في هذا الوقت ، لا يمكنك إضافة الكلمة الرئيسية الثابتة قبل الفصل. تشبه الفئة المتداخلة الثابتة في طريقة ثابتة إلى حد كبير طريقة التطبيق للفئة الداخلية في الأساليب العادية. بالإضافة إلى الوصول مباشرة إلى متغيرات الأعضاء الثابتة في الفئة الخارجية ، يمكنه أيضًا الوصول إلى المتغيرات المحلية في الطريقة الثابتة. ومع ذلك ، يجب إضافة المعدل النهائي قبل المتغير المحلي.
هل يمكن للطبقة الداخلية أن تشير إلى أعضائها في الفئة المحتوية؟ هل هناك أي قيود؟
لا بأس تماما. إذا لم تكن فئة داخلية ثابتة ، فلا يوجد حد!
إذا تعاملت مع الفصول المتداخلة الثابتة كحالة خاصة للفئات الداخلية ، في هذه الحالة ، لا يمكنك الوصول إلى متغيرات الأعضاء العادية للفئة الخارجية ، ولكن فقط الأعضاء الثابتون في الفئة الخارجية. على سبيل المثال ، الكود التالي:
الفئة الخارجية {static int x ؛ فئة ثابتة {void test () {syso (x) ؛ }}}}يمكن أن تمتد الفئة الداخلية المجهولة (الفئة الداخلية المجهولة) (الوراثة) فئات أخرى ، ويمكن أن تتنفس (تنفيذ) واجهة (واجهة)؟
يمكنك أن ترث فئات أخرى أو تنفيذ واجهات أخرى. ليس فقط يمكن ، ولكن يجب!
على سبيل المثال:
استيراد java.util.date ؛ اختبار الفئة العامة يمتد تاريخ {public static void main (string [] args) {new test (). test () ؛ } اختبار void العام () {system.out.println (super.getClass (). getName ()) ؛ }} النتيجة هي الاختبار
في طريقة الاختبار ، يتم استدعاء طريقة getClass (). getName () مباشرة ، ويتم إرجاع اسم فئة الاختبار. نظرًا لأن GetClass () يتم تعريفه على أنه نهائي في فئة الكائن ، لا يمكن للفئة الفرعية الكتابة فوق الطريقة. لذلك ، فإن طريقة الاتصال getClass (). getName () في طريقة الاختبار هي في الواقع استدعاء طريقة getClass () الموروثة من الفئة الأصل ، والتي تعادل استدعاء طريقة super.getClass (). getName (). لذلك ، يجب أيضًا إرجاع اختبار super.getClass (). getName (). إذا كنت ترغب في الحصول على اسم الفئة الأصل ، فيجب عليك استخدام الكود التالي:
getClass (). getSuperClass (). getName () ؛
ما هو الفرق بين الموجهة نحو الكائنات والموجهة نحو العملية
1 نقطة البداية مختلفة. يتمثل النهج الموجهة نحو الكائن في التعامل مع قضية العالم الموضوعي بطريقة تتوافق مع التفكير التقليدي. ويؤكد أن النقاط الرئيسية لمجال المشكلة يتم الإشارة إليها مباشرة إلى الواجهة بين الكائنات. يؤكد النهج الموجه نحو العملية على تجريد العملية ومعدلها ، وهو عبارة عن بناء يركز على العملية أو التعامل مع مشاكل العالم الموضوعية.
2. تستخدم الطريقة الموجهة للكائن منطق الكمبيوتر لمحاكاة الوجود المادي في العالم الموضوعي ، وتستخدم فئة جمع الكائنات كوحدة أساسية للتعامل مع المشكلات ، وذلك لجعل عالم الكمبيوتر أقرب إلى العالم الموضوعي قدر الإمكان ، لجعل المشكلة أكثر مباشرة. تستخدم الطريقة الموجهة نحو الكائن التسلسل الهرمي للفئة لتعكس الميراث والتطوير بين الفئات ، في حين أن طريقة العملية الموجهة للكائنات تتعامل مع المشكلات مع الوحدة الأساسية التي تتيح الوحدة التي تعبر عن العملية بوضوح ودقة ، وتستخدم التسلسل الهرمي للوحدة لتلخيص العلاقات والوظائف بين الوحدات النمطية أو الوحدات ، والملخصات التي تواجهها العالم في العملية التي يمكن معالجتها.
3 تختلف طريقة معالجة البيانات عن طريقة برنامج التحكم. تُغلف الطريقة الموجهة للكائن البيانات والرمز المقابل إلى كلي. من حيث المبدأ ، لا يمكن للكائنات الأخرى تعديل بياناتها مباشرة ، أي أن تعديل الكائنات لا يمكن إكماله إلا من خلال وظائف الأعضاء الخاصة بهم. تتمثل طريقة برنامج التحكم في تنشيط البرنامج وتشغيله من خلال "يحركه الأحداث". تقوم العملية الموجهة للكائنات بمعالجة البيانات مباشرة من خلال البرنامج ، ويتم عرض نتائج المعالجة بعد اكتمال المعالجة. فيما يتعلق بالتحكم في البرنامج ، يتم استدعاء البرنامج أو إرجاعه إلى البرنامج وفقًا للتصميم ، ولا يمكن أن يكون التنقل. هناك علاقة بين الوحدات النمطية ، بين السيطرة والتحكم ، والمكالمة والمكالمة.
4 تختلف طرق تصميم التحليل وترميزها. تحليل لنهج موجه نحو الكائن خلال دورة حياة البرنامج. في التصميم والترميز ، إنها عملية سلسة. من التحليل إلى التصميم ثم إلى الترميز ، يستخدم نموذجًا ثابتًا لعرضه ، أي اتصال سلس. تؤكد طريقة العملية الموجهة نحو الكائن على التحويل بين التصميم التحليلي والترميز وفقًا للقواعد ، ويتم تحقيق التحليل والتصميم والترميز خلال دورة حياة البرنامج.
ما هي مزايا التنمية الموجهة للكائنات
1 كفاءة التطوير الأعلى. يمكن أن يؤدي استخدام التنمية الموجهة نحو الكائن إلى تجريد الأشياء الحقيقية وتخطيط الممارسات الحقيقية مباشرة في كائنات متطورة.
2 ضمان متانة البرنامج. وذلك على وجه التحديد لأن طريقة التطوير الموجهة نحو الكائن لها قابلية لإعادة الاستخدام العالية. أثناء عملية التطوير ، تم إعادة استخدام الكود الحالي الذي تم اختباره في الحقول ذات الصلة. لذلك ، يلعب بشكل طبيعي دورًا جيدًا في تعزيز متانة البرنامج.
3 ضمان صيانة عالية للبرنامج. نظرًا لطريقة التطوير الموجهة للكائنات ، يمكن قراءة الرمز بشكل جيد للغاية. في الوقت نفسه ، فإن نمط التصميم الموجهة للكائن يجعل بنية الكود أكثر وضوحًا. في الوقت نفسه ، بالنسبة لنموذج التطوير الموجهة للكائنات ، هناك بالفعل العديد من أنماط التصميم الناضجة للغاية. يمكن أن تتيح أنماط التصميم هذه البرامج من تعديل بعض الوحدات فقط عند مواجهة التغييرات في الطلب ، لأنها أكثر ملاءمة للحفاظ عليها.
ما هو الفرق بين هذا و Super
في لغة جافا ، يشير هذا إلى كائن المثيل الحالي. واحدة من وظائفها المهمة للغاية هي التمييز بين متغيرات الأعضاء لكائن ما من المعلمات الرسمية للطريقة (عندما يشارك اسم الطريقة في متغير العضو ، سيتم كتابة متغير العضو).
يمكن استخدام Super للوصول إلى الأساليب أو متغيرات الأعضاء في فئة الأصل. عندما يكون للطريقة أو المتغير العضو لفئة الطفل نفس اسم الفئة الأصل ، سيتم أيضًا كتابة المتغير أو المتغير العضو في الفئة الأصل. إذا كنت ترغب في الوصول إلى الطريقة أو متغير الأعضاء في الفئة الأصل ، فيمكنك الوصول إليها فقط من خلال الكلمة الرئيسية الفائقة
كيفية الحصول على اسم الفصل لفئة الوالدين
توفر لغة Java طريقة للحصول على اسم الفصل: getClass (). getName (). يمكن للمطورين استدعاء هذه الطريقة للحصول على اسم الفصل. ومع ذلك ، بالنسبة للميراث ، لا يمكن الحصول على اسم فئة الفئة الأصل عن طريق استدعاء طريقة getNams (). getName () لفئة الأصل ، على سبيل المثال:
الفئة A {} اختبار الفئة العامة يمتد اختبار {public void test () {system.out.println (super.getClass ().نتيجة تشغيل البرنامج هي الاختبار. والسبب هو أن أي فئة في لغة جافا ترث من فئة الكائن. يتم تعريف طريقة getClass على أنها محلية نهائية في فئة الكائن. لا يمكن للفئات الفرعية تجاوز هذه الطريقة. لذلك ، فإن هذا. تعريف طريقة getClass () في فئة الكائن هو: إرجاع فئة وقت التشغيل لهذا الكائن. يمكن الحصول على رمز اسم الفئة الأصل في الفئة الفرعية من خلال آلية انعكاس Java على النحو التالي:
الفئة A {} اختبار الفئة العامة يمتد اختبار {public void test () {system.out.println (this.getClass (). getSuperClass ().ما هو الفرق بين الجمع والميراث
التكوين والميراث هما طريقان لإعادة استخدام الكود في الكائنات الموجهة. يشير المجموعة إلى إنشاء كائنات للفئة الأصلية في فئة جديدة وإعادة استخدام وظائف الفئة الحالية. يعد الميراث أحد الميزات الرئيسية للمجهز الموجهة للكائنات ، والذي يسمح للمصممين بتحديد تنفيذ فئة بناءً على تنفيذ فئات أخرى. يسمح كل من التكوين والميراث بإعداد كائنات الطفل في فئات جديدة ، باستثناء أن التركيب يتم عرضه ، في حين أن الميراث ضمني. هناك مراسلات بين الجمع والميراث: تتوافق الفئة بأكملها في التكوين مع الفئة الفرعية في الميراث ، والفئة المحلية في التكوين تتوافق مع الفئة الأصل في الميراث. عند استخدامه ، اتبع المبدأين التاليين:
1 ما لم تكن هناك علاقة "IS-A" بين فئتين ، لا تستخدم الميراث بسهولة ، لأن الاستخدام المفرط للميراث سيؤدي إلى تدمير قابلية الكود. عندما يتم تعديل فئة الأصل ، فإنها ستؤثر على جميع الفئات الفرعية الموروثة بها.
2. لا تستخدم الميراث فقط لتحقيق تعدد الأشكال. إذا كانت العلاقة بين الفصول ليست "IS-A" ، فيمكنك تحقيق نفس الغرض من خلال تنفيذ واجهات ومجموعات.
نظرًا لأن لغة Java تدعم فقط الميراث الفردي ، إذا كنت ترغب في أن ترث فئتين أو أكثر في نفس الوقت ، فلا يمكن تنفيذها مباشرة في Java. في الوقت نفسه ، في لغة Java ، إذا تم تحقيق الكثير من الميراث ، فسيصبح المحتوى في الفصل متضخمة. لذلك ، في لغة Java ، إذا كنت تستطيع استخدام المجموعات ، فحاول عدم استخدام الميراث.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!