ضمان 90% لأسئلة المقابلة
توجد قائمة تضم 300 سؤالًا أساسيًا لمقابلة Java. إذا كان هناك أي سؤال أساسي في مقابلة Java تم طرحه عليك، فيرجى نشره في قسم طرح الأسئلة. نحن نؤكد أنك ستحصل هنا على 90% من أسئلة وأجوبة المقابلة المتداولة.
الإجابات على أسئلة مقابلة Core Java قصيرة ومباشرة. يتم تصنيف أسئلة مقابلة Java الأساسية في أسئلة مقابلة أساسيات Java، وأسئلة مقابلة OOPs، وأسئلة مقابلة التعامل مع السلسلة، وأسئلة مقابلة Multithreading، وأسئلة مقابلة التجميع، وأسئلة مقابلة JDBC، وما إلى ذلك.
1 2 3 4 5
جافا الأساسية: أساسيات أسئلة المقابلة جافا
1) ما هي جافا؟
جافا هو المستوى الرفيع، وجوه المنحى لغة برمجة قوية وآمنة ومستقلة عن النظام الأساسي وعالية الأداء ومتعددة الخيوط ومحمولة. تم تطويره بواسطة جيمس جوسلينج في يونيو 1991. ويمكن أيضًا أن تُعرف بالمنصة لأنها توفر JRE وAPI الخاصة بها.
2) ما هي الاختلافات بين C++ وجافا؟
الفرق بين سي ++ وجافا مذكورة في الجدول التالي.
مؤشر المقارنة | سي ++ | جافا |
---|---|---|
منصة مستقلة | تعتمد لغة C++ على النظام الأساسي. | Java مستقلة عن النظام الأساسي. |
تستخدم بشكل رئيسي ل | يستخدم C++ بشكل أساسي لبرمجة النظام. | تستخدم Java بشكل أساسي لبرمجة التطبيقات. يتم استخدامه على نطاق واسع في تطبيقات النوافذ والويب والمؤسسات وتطبيقات الهاتف المحمول. |
هدف التصميم | تم تصميم C++ لبرمجة الأنظمة والتطبيقات. لقد كان امتدادا ل لغة البرمجة سي . | تم تصميم Java وإنشائها كمترجم لأنظمة الطباعة ولكن تم توسيعها لاحقًا كدعم لحوسبة الشبكة. تم تصميمه بهدف أن يكون سهل الاستخدام ومتاحًا لجمهور أوسع. |
اذهب إلى | يدعم C++ عبارة goto. | Java لا تدعم عبارة goto. |
تعدد الميراث | يدعم C++ الميراث المتعدد. | لا تدعم Java الوراثة المتعددة من خلال الفصل. يمكن تحقيقه عن طريق واجهات في جافا . |
التحميل الزائد على المشغل | يدعم لغة C++ التحميل الزائد للمشغل . | لا تدعم Java التحميل الزائد للمشغل. |
المؤشرات | يدعم C++ المؤشرات. يمكنك كتابة برنامج المؤشر في C++. | تدعم Java المؤشر داخليًا. ومع ذلك، لا يمكنك كتابة برنامج المؤشر في جافا. هذا يعني أن Java قامت بتقييد دعم المؤشر في Java. |
مترجم ومترجم | يستخدم C++ المترجم فقط. يتم تجميع لغة C++ وتشغيلها باستخدام برنامج التحويل البرمجي الذي يحول كود المصدر إلى كود الآلة، لذا فإن لغة C++ تعتمد على النظام الأساسي. | تستخدم Java المترجم والمترجم الفوري. يتم تحويل كود مصدر Java إلى bytecode في وقت التجميع. يقوم المترجم بتنفيذ هذا الرمز الثانوي في وقت التشغيل وينتج الإخراج. يتم تفسير Java ولهذا السبب فهي مستقلة عن النظام الأساسي. |
الاتصال حسب القيمة والاتصال حسب المرجع | يدعم C++ كلاً من الاتصال حسب القيمة والاتصال حسب المرجع. | تدعم Java الاتصال حسب القيمة فقط. لا يوجد استدعاء حسب المرجع في Java. |
الهيكل والاتحاد | يدعم C++ الهياكل والنقابات. | جافا لا تدعم الهياكل والنقابات. |
دعم الموضوع | لا يحتوي C++ على دعم مدمج لسلاسل الرسائل. يعتمد على مكتبات الطرف الثالث لدعم سلسلة الرسائل. | جافا لديها المدمج في خيط يدعم. |
تعليق التوثيق | لا يدعم C++ تعليق التوثيق. | تدعم Java تعليق التوثيق (/** ... */) لإنشاء وثائق لكود مصدر Java. |
الكلمة الرئيسية الافتراضية | يدعم C++ الكلمة الأساسية الافتراضية حتى نتمكن من تحديد ما إذا كان سيتم تجاوز الوظيفة أم لا. | لا تحتوي Java على كلمة رئيسية افتراضية. يمكننا تجاوز جميع الأساليب غير الثابتة بشكل افتراضي. بمعنى آخر، تكون الأساليب غير الثابتة افتراضية بشكل افتراضي. |
التحول الأيمن غير الموقعة >>> | لا يدعم C++ عامل التشغيل >>>. | تدعم Java عامل التحويل لليمين غير الموقع >>> الذي يملأ الصفر في الأعلى للأرقام السالبة. بالنسبة للأرقام الموجبة، فإنه يعمل بنفس طريقة عامل التشغيل >>. |
شجرة الميراث | يقوم C++ بإنشاء شجرة وراثة جديدة دائمًا. | تستخدم Java شجرة وراثة واحدة دائمًا لأن جميع الفئات هي فرع من فئة الكائن في Java. فئة الكائن هي جذر ميراث شجرة في جافا. |
المعدات | C++ أقرب إلى الأجهزة. | Java ليست تفاعلية جدًا مع الأجهزة. |
وجوه المنحى | C++ هي لغة موجهة للكائنات. ومع ذلك، في لغة C، التسلسل الهرمي للجذر الواحد غير ممكن. | جافا هي أيضا وجوه المنحى لغة. ومع ذلك، كل شيء (ما عدا الأنواع الأساسية) هو كائن في Java. إنه تسلسل هرمي لجذر واحد حيث يتم اشتقاق كل شيء من java.lang.Object. |
3) اذكر مميزات لغة البرمجة جافا.
هناك الميزات التالية في لغة برمجة جافا.
4) ماذا تفهم عن آلة جافا الافتراضية؟
آلة جافا الافتراضية هو جهاز افتراضي يمكّن الكمبيوتر من تشغيل برنامج Java. يعمل JVM كمحرك وقت التشغيل الذي يستدعي الطريقة الرئيسية الموجودة في كود Java. JVM هي المواصفات التي يجب تنفيذها في نظام الكمبيوتر. يتم تجميع كود Java بواسطة JVM ليكون Bytecode وهو مستقل عن الآلة وقريب من الكود الأصلي.
5) ما الفرق بين JDK وJRE وJVM؟
JVM
JVM هو اختصار لـ Java Virtual Machine؛ إنها آلة مجردة توفر بيئة وقت التشغيل التي يمكن من خلالها تنفيذ Java bytecode. إنها مواصفات تحدد عمل Java Virtual Machine. وقد تم تنفيذه من قبل شركة أوراكل وشركات أخرى. يُعرف تنفيذه باسم JRE.
تتوفر JVMs للعديد من الأنظمة الأساسية للأجهزة والبرامج (لذا فإن JVM يعتمد على النظام الأساسي). إنه مثيل وقت التشغيل الذي يتم إنشاؤه عندما نقوم بتشغيل فئة Java. هناك ثلاث مفاهيم لـ JVM: المواصفات والتنفيذ والمثيل.
جي آر إي
JRE تعني بيئة تشغيل Java. إنه تنفيذ JVM. Java Runtime Environment عبارة عن مجموعة من الأدوات البرمجية المستخدمة لتطوير تطبيقات Java. يتم استخدامه لتوفير بيئة وقت التشغيل. إنه تنفيذ JVM. إنه موجود جسديا. يحتوي على مجموعة من المكتبات + الملفات الأخرى التي يستخدمها JVM في وقت التشغيل.
JDK
JDK هو اختصار لعبارة Java Development Kit. إنها بيئة تطوير برمجيات تُستخدم لتطوير تطبيقات وتطبيقات Java. إنه موجود جسديا. أنه يحتوي على أدوات التطوير JRE +. JDK هو تطبيق لأي من منصات Java المذكورة أدناه والتي أصدرتها شركة Oracle Corporation:
- الإصدار القياسي لمنصة جافا
- منصة جافا إصدار المؤسسة
- منصة جافا الإصدار الصغير
6) ما عدد أنواع مناطق الذاكرة المخصصة بواسطة JVM؟
أنواع عديدة:
7) ما هو مترجم JIT؟
مترجم Just-In-Time (JIT): يتم استخدامه لتحسين الأداء. يقوم JIT بتجميع أجزاء من الكود الثانوي التي لها وظائف مماثلة في نفس الوقت، وبالتالي يقلل مقدار الوقت اللازم للتجميع. يشير مصطلح المترجم هنا إلى مترجم من مجموعة التعليمات الخاصة بجهاز Java الظاهري (JVM) إلى مجموعة التعليمات الخاصة بوحدة المعالجة المركزية المحددة.
8) ما هي المنصة؟
النظام الأساسي هو بيئة الأجهزة أو البرامج التي يتم فيها تنفيذ جزء من البرنامج. هناك نوعان من المنصات، القائمة على البرمجيات والقائمة على الأجهزة. توفر Java النظام الأساسي القائم على البرامج.
9) ما هي الاختلافات الرئيسية بين منصة Java والمنصات الأخرى؟
هناك الاختلافات التالية بين منصة Java والأنظمة الأساسية الأخرى.
- Java هي منصة قائمة على البرمجيات بينما قد تكون الأنظمة الأساسية الأخرى هي منصات الأجهزة أو الأنظمة الأساسية القائمة على البرامج.
- يتم تنفيذ Java أعلى الأنظمة الأساسية للأجهزة الأخرى، بينما يمكن أن تحتوي الأنظمة الأساسية الأخرى على مكونات الأجهزة فقط.
10) ما الذي يمنح Java طبيعة 'الكتابة مرة واحدة والتشغيل في أي مكان'؟
الرمز الثانوي. يقوم مترجم Java بتحويل برامج Java إلى ملف الفئة (Byte Code) وهو اللغة الوسيطة بين كود المصدر ورمز الجهاز. رمز البايت هذا ليس خاصًا بالنظام الأساسي ويمكن تنفيذه على أي جهاز كمبيوتر.
11) ما هو محمل الفصل؟
Classloader هو نظام فرعي من JVM يستخدم لتحميل ملفات الفئة. عندما نقوم بتشغيل برنامج جافا، يتم تحميله أولاً بواسطة أداة تحميل الفصل. هناك ثلاثة أدوات تحميل فئة مدمجة في Java.
12) هل اسم الملف .java الفارغ هو اسم ملف مصدر صالح؟
نعم، تسمح Java بحفظ ملف Java الخاص بنا .جافا فقط، نحن بحاجة إلى تجميعها من قبل جافا.جافا ويديرها اسم فئة جافا لنأخذ مثالاً بسيطًا:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
تجميعها بواسطة جافا.جافا
تشغيله جافا أ
13) هل الكلمة الرئيسية حذف أم تالية أم رئيسية أم خروج أم فارغة في جافا؟
لا.
14) إذا لم أقدم أي وسيطات في سطر الأوامر، فما القيمة المخزنة في مصفوفة السلسلة التي سيتم تمريرها إلى الأسلوب main()، فارغة أم فارغة؟
إنها فارغة، ولكنها ليست فارغة.
15) ماذا لو كتبت الفراغ العام الثابت بدلاً من الفراغ العام الثابت؟
يتم تجميع البرنامج وتشغيله بشكل صحيح لأن ترتيب المحددات لا يهم في Java.
16) ما هي القيمة الافتراضية للمتغيرات المحلية؟
لم تتم تهيئة المتغيرات المحلية إلى أي قيمة افتراضية، لا الأولية ولا مراجع الكائنات.
17) ما هي محددات الوصول المختلفة في جافا؟
في Java، محددات الوصول هي الكلمات الأساسية المستخدمة لتحديد نطاق الوصول للطريقة أو الفئة أو المتغير. في Java، هناك أربعة محددات وصول مذكورة أدناه.
18) ما هو الغرض من الأساليب الثابتة والمتغيرات؟
تتم مشاركة الأساليب أو المتغيرات المحددة على أنها ثابتة بين كافة كائنات الفئة. الثابت هو جزء من الفئة وليس من الكائن. يتم تخزين المتغيرات الثابتة في منطقة الفصل، ولا نحتاج إلى إنشاء الكائن للوصول إلى هذه المتغيرات. لذلك، يتم استخدام الثبات في الحالة التي نحتاج فيها إلى تحديد المتغيرات أو الأساليب المشتركة بين جميع كائنات الفئة.
على سبيل المثال، في الفصل الذي يحاكي مجموعة الطلاب في الكلية، يكون اسم الكلية هو السمة المشتركة لجميع الطلاب. ولذلك سيتم تعريف اسم الكلية على أنه ثابتة .
19) ما هي مميزات الحزم في جافا؟
هناك مزايا مختلفة لتحديد الحزم في Java.
- تتجنب الحزم تضارب الأسماء.
- توفر الحزمة تحكمًا أسهل في الوصول.
- يمكننا أيضًا الحصول على الفئات المخفية غير المرئية في الخارج والتي تستخدمها الحزمة.
- من الأسهل تحديد الفئات ذات الصلة.
20) ما هو مخرج برنامج جافا التالي؟
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
سيكون إخراج الكود أعلاه
30Javatpoint Javatpoint1020
توضيح
في الحالة الأولى، يتم التعامل مع الرقمين 10 و20 كأرقام ويتم إضافتهما ليكونا 30. والآن يتم التعامل مع مجموعهما 30 كسلسلة ويتم ربطهما بالسلسلة جافاتبوينت . ولذلك سيكون الإخراج 30جافاتبوينت .
في الحالة الثانية، يتم ربط سلسلة Javatpoint بالرقم 10 لتكون السلسلة جافاتبوينت10 والتي سيتم بعد ذلك متسلسلة مع 20 ليكون جافاتبوينت1020 .
21) ما هو ناتج برنامج جافا التالي؟
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
سيكون إخراج الكود أعلاه
200Javatpoint Javatpoint200
توضيح
في الحالة الأولى، سيتم ضرب الرقمين 10 و 20 أولاً ثم يتم التعامل مع النتيجة 200 على أنها سلسلة ويتم ربطها بالسلسلة جافاتبوينت لإنتاج الإخراج 200جافاتبوينت .
وفي الحالة الثانية، سيتم ضرب الرقمين 10 و 20 أولاً ليصبح 200 لأن أسبقية الضرب أعلى من الجمع. سيتم التعامل مع النتيجة 200 كسلسلة وسيتم ربطها بالسلسلة جافاتبوينت لإنتاج الإخراج كما جافاتبوينت200 .
22) ما هو ناتج برنامج جافا التالي؟
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
سيعطي الكود أعلاه خطأ وقت الترجمة لأن حلقة for تتطلب قيمة منطقية في الجزء الثاني ونحن نقدم قيمة عددية، أي 0.
Java الأساسية - مفاهيم OOPs: أسئلة المقابلة الأولية لـ OOPs
يتم طرح أكثر من 50 سؤالًا للمقابلة مع OOPs (البرمجة الشيئية والنظام). ومع ذلك، فقد تم تصنيفها في العديد من الأقسام مثل أسئلة مقابلة البناء، وأسئلة المقابلة الثابتة، وأسئلة مقابلة الميراث، وسؤال مقابلة التجريد، وأسئلة مقابلة تعدد الأشكال، وما إلى ذلك من أجل فهم أفضل.
23) ما هو النموذج الموجه للكائنات؟
إنه نموذج برمجة يعتمد على الكائنات التي تحتوي على بيانات وأساليب محددة في الفئة التي تنتمي إليها. يهدف النموذج الموجه للكائنات إلى دمج مزايا النمطية وإمكانية إعادة الاستخدام. الكائنات هي مثيلات الفئات التي تتفاعل مع بعضها البعض لتصميم التطبيقات والبرامج. هناك الميزات التالية للنموذج الموجه للكائنات.
- يتبع النهج التصاعدي في تصميم البرنامج.
- التركيز على البيانات بطرق العمل على بيانات الكائن
- يتضمن مفهومًا مثل التغليف والتجريد الذي يخفي التعقيدات عن المستخدم ويظهر الوظيفة فقط.
- ينفذ النهج في الوقت الحقيقي مثل الميراث، والتجريد، وما إلى ذلك.
- أمثلة النموذج الموجه للكائنات هي C++، Simula، Smalltalk، Python، C#، إلخ.
24) ما هو الكائن؟
الكائن هو كيان في الوقت الفعلي له بعض الحالة والسلوك. في Java، الكائن هو مثيل للفئة التي تحتوي على متغيرات المثيل كحالة الكائن والطرق كسلوك الكائن. يمكن إنشاء كائن فئة باستخدام جديد الكلمة الرئيسية.
25) ما الفرق بين لغة البرمجة الشيئية ولغة البرمجة الشيئية؟
هناك الاختلافات الأساسية التالية بين اللغة الموجهة للكائنات واللغة القائمة على الكائنات.
- تتبع اللغات الشيئية جميع مفاهيم OOPs بينما لا تتبع اللغة المبنية على الكائنات جميع مفاهيم OOPs مثل الميراث وتعدد الأشكال.
- لا تحتوي اللغات الموجهة للكائنات على كائنات مدمجة في حين أن اللغات المستندة إلى الكائنات تحتوي على كائنات مدمجة، على سبيل المثال، تحتوي JavaScript على كائن نافذة.
- من أمثلة البرمجة الموجهة للكائنات Java وC# وSmalltalk وما إلى ذلك، في حين أن أمثلة اللغات المستندة إلى الكائنات هي JavaScript وVBScript وما إلى ذلك.
26) ما هي القيمة الأولية لمرجع الكائن الذي تم تعريفه كمتغير مثيل؟
تتم تهيئة كافة مراجع الكائنات إلى قيمة فارغة في Java.
Java الأساسية - مفاهيم OOPs: أسئلة مقابلة المنشئ
27) ما هو المنشئ؟
يمكن تعريف المنشئ بأنه نوع خاص من الطريقة المستخدمة لتهيئة حالة الكائن. يتم استدعاؤه عند إنشاء مثيل للفئة وتخصيص الذاكرة للكائن. في كل مرة، يتم إنشاء كائن باستخدام جديد الكلمة الأساسية، يتم استدعاء المنشئ الافتراضي للفئة. يجب أن يكون اسم المنشئ مشابهًا لاسم الفئة. يجب ألا يكون للمنشئ نوع إرجاع واضح.
المزيد من التفاصيل.28) كم عدد أنواع المنشئات المستخدمة في جافا؟
استنادا إلى المعلمات التي تم تمريرها في المنشئات، هناك نوعان من المنشئات في Java.
29) ما هو الغرض من المنشئ الافتراضي؟
الغرض من المنشئ الافتراضي هو تعيين القيمة الافتراضية للكائنات. يقوم مترجم Java بإنشاء مُنشئ افتراضي ضمنيًا في حالة عدم وجود مُنشئ في الفصل.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }اختبره الآن
انتاج:
0 null 0 null
توضيح: في الفئة المذكورة أعلاه، لا تقوم بإنشاء أي مُنشئ، لذلك يوفر لك المترجم مُنشئًا افتراضيًا. هنا يتم توفير القيم 0 والقيم الخالية بواسطة المُنشئ الافتراضي.
المزيد من التفاصيل.
30) هل يقوم المنشئ بإرجاع أي قيمة؟
أعوام: نعم، يقوم المُنشئ ضمنيًا بإرجاع المثيل الحالي للفئة (لا يمكنك استخدام نوع إرجاع صريح مع المُنشئ). المزيد من التفاصيل.
31) هل المنشئ موروث؟
لا، المنشئ غير موروث.
32) هل يمكنك جعل المنشئ نهائيًا؟
لا، لا يمكن أن يكون المُنشئ نهائيًا.
.04 ككسر
33) هل يمكننا أن نثقل كاهل الصانعين؟
نعم، يمكن تحميل المنشئات بشكل زائد عن طريق تغيير عدد الوسائط التي يقبلها المنشئ أو عن طريق تغيير نوع بيانات المعلمات. النظر في المثال التالي.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
في البرنامج أعلاه، يتم تحميل اختبار المنشئ بمنشئ آخر. في الاستدعاء الأول للمنشئ، يتم استدعاء المنشئ ذو الوسيطتين، وستتم تهيئتي بالقيمة 10. ومع ذلك، في الاستدعاء الثاني للمنشئ، يتم استدعاء المنشئ ذي الوسيطتين، وستتم تهيئتي مع القيمة 15.
34) ماذا تفهم من خلال منشئ النسخ في جافا؟
لا يوجد مُنشئ نسخ في Java. ومع ذلك، يمكننا نسخ القيم من كائن إلى آخر مثل مُنشئ النسخ في لغة C++.
هناك طرق عديدة لنسخ قيم كائن إلى آخر في Java. هم:
- بواسطة المنشئ
- عن طريق تعيين قيم كائن إلى آخر
- بواسطة طريقة استنساخ () لفئة الكائن
في هذا المثال، سنقوم بنسخ قيم كائن إلى آخر باستخدام منشئ جافا.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }اختبره الآن
انتاج:
111 Karan 111 Karan
35) ما هي الاختلافات بين المنشئين والأساليب؟
هناك العديد من الاختلافات بين المنشئين والأساليب. وترد أدناه.
جافا منشئ | طريقة جافا |
---|---|
يتم استخدام المنشئ لتهيئة حالة الكائن. | يتم استخدام الطريقة لكشف سلوك الكائن. |
يجب ألا يكون للمنشئ نوع إرجاع. | يجب أن تحتوي الطريقة على نوع إرجاع. |
يتم استدعاء المنشئ ضمنيًا. | يتم استدعاء الطريقة بشكل صريح. |
يوفر مترجم Java مُنشئًا افتراضيًا إذا لم يكن لديك أي مُنشئ في الفصل الدراسي. | لم يتم توفير الطريقة من قبل المترجم في أي حال. |
يجب أن يكون اسم المنشئ هو نفس اسم الفئة. | اسم الطريقة قد يكون أو لا يكون نفس اسم الفئة. |
36) ما هو ناتج برنامج جافا التالي؟
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
مخرجات البرنامج التالي هي :
a = 10 b = 15
هنا، يتم ترقية نوع بيانات المتغيرين a وb، أي البايت إلى int، ويتم استدعاء أول مُنشئ ذي معلمات بمعلمتين صحيحتين.
37) ما هو مخرج برنامج جافا التالي؟
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
مخرجات البرنامج هي 0 لأن المتغير i تمت تهيئته إلى 0 داخليًا. كما نعلم أنه يتم استدعاء المُنشئ الافتراضي ضمنيًا في حالة عدم وجود مُنشئ في الفصل، تتم تهيئة المتغير i إلى 0 نظرًا لعدم وجود مُنشئ في الفصل.
38) ما هو ناتج برنامج جافا التالي؟
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
هناك خطأ المترجم في البرنامج بسبب وجود استدعاء للمنشئ الافتراضي في الطريقة الرئيسية وهو غير موجود في الفصل. ومع ذلك، يوجد مُنشئ ذو معلمات واحد فقط في فئة الاختبار. لذلك، لا يتم استدعاء أي مُنشئ افتراضي بواسطة المُنشئ ضمنيًا.
Java الأساسية - مفاهيم OOPs: أسئلة مقابلة الكلمات الرئيسية الثابتة
39) ما هو المتغير الساكن؟
يتم استخدام المتغير الثابت للإشارة إلى الخاصية المشتركة لجميع الكائنات (التي ليست فريدة لكل كائن)، على سبيل المثال، اسم الشركة للموظفين، وأسماء الطلاب بالكلية، وما إلى ذلك. يحصل المتغير الثابت على الذاكرة مرة واحدة فقط في منطقة الفصل الدراسي في وقت تحميل الصف. استخدام متغير ثابت يجعل برنامجك أكثر كفاءة في الذاكرة (يحفظ الذاكرة). ينتمي المتغير الثابت إلى الفئة بدلاً من الكائن.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }اختبره الآن
Output:111 Karan ITS 222 Aryan ITS
المزيد من التفاصيل.
40) ما هو الأسلوب الساكن؟
- تنتمي الطريقة الثابتة إلى الفئة بدلاً من الكائن.
- ليست هناك حاجة لإنشاء الكائن لاستدعاء الأساليب الثابتة.
- يمكن للطريقة الثابتة الوصول إلى قيمة المتغير الثابت وتغييرها.
41) ما هي القيود المطبقة على أساليب جافا الثابتة؟
يتم تطبيق قيدين رئيسيين على الأساليب الثابتة.
- لا يمكن للطريقة الثابتة استخدام عضو بيانات غير ثابت أو استدعاء الطريقة غير الثابتة مباشرة.
- لا يمكن استخدام this وsuper في سياق ثابت لأنهما غير ثابتين.
42) لماذا الطريقة الرئيسية ثابتة؟
لأن الكائن غير مطلوب لاستدعاء الطريقة الثابتة. إذا جعلنا الطريقة الرئيسية غير ثابتة، فسيتعين على JVM إنشاء كائنها أولاً ثم استدعاء الطريقة main() التي ستؤدي إلى تخصيص ذاكرة إضافية. المزيد من التفاصيل.
43) هل يمكننا تجاوز الأساليب الثابتة؟
لا، لا يمكننا تجاوز الأساليب الثابتة.
44) ما هي الكتلة الساكنة؟
يتم استخدام الكتلة الثابتة لتهيئة عضو البيانات الثابتة. يتم تنفيذه قبل الطريقة الرئيسية، في وقت تحميل الفصل.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }اختبره الآن
Output: static block is invoked Hello main
المزيد من التفاصيل.
45) هل يمكننا تنفيذ برنامج بدون الطريقة main()؟
الإجابة) لا، كان من الممكن استخدام الكتلة الثابتة قبل JDK 1.7. منذ JDK 1.7، هذا غير ممكن. المزيد من التفاصيل.
46) ماذا لو تمت إزالة المعدل الثابت من توقيع الطريقة الرئيسية؟
يجمع البرنامج. ومع ذلك، في وقت التشغيل، فإنه يلقي خطأ 'NoSuchMethodError'.
47) ما الفرق بين الطريقة الثابتة (الفئة) وطريقة المثيل؟
طريقة ثابتة أو فئة | طريقة المثيل |
---|---|
1) تُعرف الطريقة التي تم الإعلان عنها على أنها ثابتة بالطريقة الثابتة. | تُعرف الطريقة التي لم يتم الإعلان عنها على أنها ثابتة باسم طريقة المثيل. |
2) لا نحتاج إلى إنشاء كائنات لاستدعاء الأساليب الثابتة. | الكائن مطلوب لاستدعاء أساليب المثيل. |
3) لا يمكن الوصول إلى الأعضاء غير الثابتين (المثيل) في السياق الثابت (الطريقة الثابتة، والكتلة الثابتة، والفئة المتداخلة الثابتة) مباشرةً. | يمكن الوصول إلى المتغيرات الثابتة وغير الثابتة في طرق المثيل. |
4) على سبيل المثال: public static int cube(int n){ return n*n*n;} | على سبيل المثال: public void msg(){...}. |
48) هل يمكننا أن نجعل المنشئات ثابتة؟
كما نعلم أن السياق الثابت (الطريقة أو الكتلة أو المتغير) ينتمي إلى الفئة وليس إلى الكائن. نظرًا لأنه يتم استدعاء المُنشئين فقط عند إنشاء الكائن، فليس هناك أي معنى لجعل المُنشئين ثابتين. ومع ذلك، إذا حاولت القيام بذلك، سيُظهر المترجم خطأ المترجم.
49) هل يمكننا أن نجعل الأساليب المجردة ثابتة في جافا؟
في Java، إذا جعلنا الأساليب المجردة ثابتة، فسوف تصبح جزءًا من الفصل، ويمكننا أن نسميها مباشرة وهو أمر غير ضروري. إن استدعاء طريقة غير محددة غير مجدية تمامًا، لذا فهو غير مسموح به.
50) هل يمكننا الإعلان عن المتغيرات والأساليب الثابتة في فئة مجردة؟
نعم، يمكننا الإعلان عن المتغيرات والأساليب الثابتة بطريقة مجردة. كما نعلم أنه لا توجد متطلبات لجعل الكائن يصل إلى السياق الثابت، لذلك يمكننا الوصول إلى السياق الثابت المعلن داخل الفئة المجردة باستخدام اسم الفئة المجردة. النظر في المثال التالي.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
انتاج |
hi !! I am good !! i = 102
Java الأساسية - مفاهيم OOPs: أسئلة مقابلة الميراث
51) ما هو هذا الكلمة الرئيسية في جافا؟
ال هذا الكلمة الأساسية هي متغير مرجعي يشير إلى الكائن الحالي. هناك استخدامات مختلفة لهذه الكلمة الأساسية في Java. يمكن استخدامه للإشارة إلى خصائص الفئة الحالية مثل أساليب المثيل والمتغير والمنشئات وما إلى ذلك. ويمكن أيضًا تمريره كوسيطة إلى الأساليب أو المنشئات. ويمكن أيضًا إرجاعه من الطريقة كمثيل للفئة الحالية.
المزيد من التفاصيل.
52) ما هي الاستخدامات الرئيسية لهذه الكلمة؟
هناك الاستخدامات التالية ل هذا الكلمة الرئيسية.
53) هل يمكننا إسناد الإشارة إلى هذا عامل؟
لا، لا يمكن تعيين هذا لأي قيمة لأنه يشير دائمًا إلى كائن الفئة الحالي وهذا هو المرجع النهائي في Java. ومع ذلك، إذا حاولنا القيام بذلك، سيتم عرض خطأ المترجم. النظر في المثال التالي.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
انتاج |
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) يمكن هذا هل يمكن استخدام الكلمة الأساسية لإحالة الأعضاء الثابتين؟
نعم، من الممكن استخدام هذه الكلمة الأساسية لإحالة الأعضاء الثابتين لأن هذا مجرد متغير مرجعي يشير إلى كائن الفئة الحالي. ومع ذلك، كما نعلم، ليس من الضروري الوصول إلى المتغيرات الثابتة من خلال الكائنات، وبالتالي، ليس من أفضل الممارسات استخدام هذا لإحالة الأعضاء الثابتين. النظر في المثال التالي.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
انتاج |
10
55) كيف يمكن عمل تسلسل المنشئ باستخدام هذه الكلمة الأساسية؟
يتيح لنا تسلسل المنشئ استدعاء مُنشئ واحد من مُنشئ آخر للفئة فيما يتعلق بكائن الفئة الحالي. يمكننا استخدام هذه الكلمة الأساسية لتنفيذ تسلسل المُنشئ داخل نفس الفئة. خذ بعين الاعتبار المثال التالي الذي يوضح كيف يمكننا استخدام هذه الكلمة الأساسية لتحقيق تسلسل المنشئ.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
انتاج |
ID: 105 Name:Vikas age:22 address: Delhi
56) ما هي مزايا تمرير هذا إلى طريقة بدلاً من كائن الفئة الحالي نفسه؟
كما نعلم، أن هذا يشير إلى كائن الفئة الحالية، وبالتالي، يجب أن يكون مشابهًا لكائن الفئة الحالية. ومع ذلك، يمكن أن يكون هناك ميزتان رئيسيتان لتمرير هذا إلى أسلوب بدلاً من كائن الفئة الحالي.
- هذا هو المتغير النهائي. ولذلك، لا يمكن تعيين هذا لأي قيمة جديدة في حين أن كائن الفئة الحالية قد لا يكون نهائيًا ويمكن تغييره.
- يمكن استخدام هذا في الكتلة المتزامنة.
57) ما هو الميراث؟
الميراث هو آلية يكتسب من خلالها كائن ما جميع خصائص وسلوك كائن آخر من فئة أخرى. يتم استخدامه لإعادة استخدام التعليمات البرمجية وتجاوز الطريقة. الفكرة وراء الميراث في Java هي أنه يمكنك إنشاء فئات جديدة مبنية على الفئات الموجودة. عندما ترث من فئة موجودة، يمكنك إعادة استخدام أساليب وحقول الفئة الأصلية. علاوة على ذلك، يمكنك إضافة أساليب وحقول جديدة في صفك الحالي أيضًا. يمثل الميراث علاقة IS-A والتي تُعرف أيضًا بالعلاقة بين الوالدين والطفل.
هناك خمسة أنواع من الميراث في جاوة.
- الميراث على مستوى واحد
- الميراث متعدد المستويات
- الميراث المتعدد
- الميراث الهرمي
- الميراث الهجين
الوراثة المتعددة غير مدعومة في Java من خلال الفصل.
المزيد من التفاصيل.58) لماذا يتم استخدام الميراث في جافا؟
هناك مزايا مختلفة لاستخدام الميراث في Java الموضحة أدناه.
- يوفر الميراث إمكانية إعادة استخدام التعليمات البرمجية. لا تحتاج الفئة المشتقة إلى إعادة تعريف طريقة الفئة الأساسية إلا إذا كانت بحاجة إلى توفير التنفيذ المحدد للطريقة.
- لا يمكن تحقيق تعدد الأشكال في وقت التشغيل دون استخدام الميراث.
- يمكننا محاكاة وراثة الفئات باستخدام كائنات الوقت الفعلي مما يجعل OOPs أكثر واقعية.
- يوفر الميراث إخفاء البيانات. يمكن للفئة الأساسية إخفاء بعض البيانات من الفئة المشتقة بجعلها خاصة.
- لا يمكن تحقيق تجاوز الطريقة بدون الميراث. من خلال تجاوز الطريقة، يمكننا تقديم تطبيق محدد لبعض الطرق الأساسية التي تحتوي عليها الفئة الأساسية.
59) ما هي الفئة المتفوقة لجميع الفئات؟
فئة الكائن هي الفئة الفائقة لجميع الفئات الأخرى في Java.
60) لماذا لا يتم دعم الميراث المتعدد في جافا؟
لتقليل التعقيد وتبسيط اللغة، لا يتم دعم الميراث المتعدد في Java. فكر في سيناريو تكون فيه A وB وC ثلاث فئات. ترث الفئة C الفئتين A وB. إذا كانت الفئتان A وB لهما نفس الطريقة وقمت باستدعائها من كائن فئة فرعية، فسيكون هناك غموض في استدعاء طريقة الفئة A أو B.
نظرًا لأن أخطاء وقت الترجمة أفضل من أخطاء وقت التشغيل، فإن Java تعرض خطأ وقت الترجمة إذا ورثت فئتين. لذلك، سواء كان لديك نفس الطريقة أو مختلفة، سيكون هناك خطأ في وقت الترجمة.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }اختبره الآن
Compile Time Error
61) ما هو التجميع؟
يمكن تعريف التجميع على أنه العلاقة بين فئتين حيث تحتوي الفئة المجمعة على مرجع للفئة التي تمتلكها. أفضل وصف للتجميع هو أ لديه أ علاقة. على سبيل المثال، تحتوي الفئة الإجمالية للموظف التي تحتوي على حقول مختلفة مثل العمر والاسم والراتب أيضًا على كائن من فئة العنوان الذي يحتوي على حقول متنوعة مثل سطر العنوان 1 والمدينة والولاية والرمز السري. بمعنى آخر، يمكننا القول أن الموظف (الفئة) لديه كائن من فئة العنوان. النظر في المثال التالي.
java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
الموظف.جافا
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
انتاج |
111 varun gzb UP india 112 arun gno UP india
62) ما هو التكوين؟
يُعرف الاحتفاظ بمرجع فئة ما داخل فئة أخرى بالتكوين. عندما يحتوي كائن على كائن آخر، إذا كان الكائن المتضمن لا يمكن أن يوجد بدون وجود كائن حاوية، فإنه يسمى تكوين. بمعنى آخر، يمكننا القول أن التركيب هو حالة التجميع الخاصة التي تمثل علاقة أقوى بين كائنين. مثال: الفصل يحتوي على طلاب. لا يمكن للطالب أن يوجد بدون فصل دراسي. هناك تكوين بين الفصل والطلاب.
63) ما الفرق بين التجميع والتركيب؟
يمثل التجميع العلاقة الضعيفة بينما يمثل التركيب العلاقة القوية. على سبيل المثال، الدراجة لديها مؤشر (تجميع)، ولكن الدراجة لديها محرك (تكوين).
64) لماذا لا تدعم جافا المؤشرات؟
المؤشر هو متغير يشير إلى عنوان الذاكرة. لا يتم استخدامها في Java لأنها غير آمنة (غير آمنة) ومعقدة الفهم.
65) ما هو السوبر في جافا؟
ال ممتاز الكلمة الأساسية في Java هي متغير مرجعي يُستخدم للإشارة إلى كائن الفئة الأصل المباشر. عندما تقوم بإنشاء مثيل للفئة الفرعية، يتم إنشاء مثيل للفئة الأصلية ضمنيًا والذي تتم الإشارة إليه بواسطة متغير مرجعي فائق. يتم استدعاء super() في مُنشئ الفصل ضمنيًا بواسطة المترجم إذا لم يكن هناك super أو this.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }اختبره الآن
انتاج:
animal is created dog is createdالمزيد من التفاصيل.
66) كيف يمكن عمل تسلسل المنشئ باستخدام الكلمة الأساسية super؟
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
انتاج |
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) ما هي الاستخدامات الرئيسية للكلمة الرئيسية سوبر؟
هناك الاستخدامات التالية للكلمة الرئيسية الفائقة.
- يمكن استخدام super للإشارة إلى متغير مثيل الفئة الأصل المباشر.
- يمكن استخدام super لاستدعاء طريقة الفئة الأصل المباشرة.
- يمكن استخدام super() لاستدعاء مُنشئ الفئة الأصل المباشر.
68) ما هي الاختلافات بين هذه والكلمة الرئيسية الفائقة؟
توجد الاختلافات التالية بين هذه الكلمة الرئيسية والكلمة الرئيسية الفائقة.
- تشير الكلمة الأساسية super دائمًا إلى سياقات الفئة الأصلية بينما تشير هذه الكلمة الأساسية دائمًا إلى سياق الفئة الحالية.
- يتم استخدام الكلمة الأساسية super بشكل أساسي لتهيئة متغيرات الفئة الأساسية داخل مُنشئ الفئة المشتقة بينما تُستخدم هذه الكلمة الأساسية بشكل أساسي للتمييز بين المتغيرات المحلية ومتغيرات المثيل عند تمريرها في مُنشئ الفئة.
- يجب أن يكون super وهذا هو البيان الأول داخل المنشئ وإلا فإن المترجم سوف يلقي خطأ.
69) ما هو ناتج برنامج جافا التالي؟
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
انتاج |
Person class constructor called Employee class constructor called
توضيح
يتم استدعاء super() ضمنيًا بواسطة المترجم إذا لم يتم تضمين super() أو this() بشكل صريح داخل مُنشئ الفئة المشتقة. لذلك، في هذه الحالة، يتم استدعاء مُنشئ فئة الشخص أولاً ثم يتم استدعاء مُنشئ فئة الموظف.
70) هل يمكنك استخدام هذا () وsuper () في المنشئ؟
لا، لأن this() وsuper() يجب أن يكونا البيان الأول في مُنشئ الفصل.
مثال:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
انتاج:
Test.java:5: error: call to this must be first statement in constructor
71) ما هو استنساخ الكائنات؟
يتم استخدام استنساخ الكائن لإنشاء نسخة طبق الأصل من الكائن. يتم استخدام طريقة clone () لفئة الكائن لاستنساخ كائن. ال java.lang.Cloneable يجب أن يتم تنفيذ الواجهة بواسطة الفئة التي نريد إنشاء نسخة كائنها. إذا لم نقم بتنفيذ واجهة قابلة للاستنساخ، فستقوم طريقة clone() بإنشاء CloneNotSupportedException.
protected Object clone() throws CloneNotSupportedExceptionالمزيد من التفاصيل.
Java الأساسية - مفاهيم OOPs: طريقة التحميل الزائد على أسئلة المقابلة
72) ما هو أسلوب التحميل الزائد؟
التحميل الزائد للطريقة هو تقنية تعدد الأشكال التي تسمح لنا بإنشاء طرق متعددة بنفس الاسم ولكن بتوقيع مختلف. يمكننا تحقيق التحميل الزائد للطريقة بطريقتين.
- عن طريق تغيير عدد الحجج
- عن طريق تغيير نوع البيانات من الحجج
التحميل الزائد للأسلوب يزيد من سهولة قراءة البرنامج. يتم تنفيذ طريقة التحميل الزائد لمعرفة البرنامج بسرعة.
المزيد من التفاصيل.73) لماذا لا يمكن التحميل الزائد للطريقة عن طريق تغيير نوع الإرجاع في جافا؟
في Java، لا يكون التحميل الزائد للطريقة ممكنًا عن طريق تغيير نوع الإرجاع للبرنامج لتجنب الغموض.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}اختبره الآن
انتاج:
Compile Time Error: method add(int, int) is already defined in class Adderالمزيد من التفاصيل.
74) هل يمكننا زيادة التحميل على الأساليب بجعلها ثابتة؟
لا، لا يمكننا زيادة تحميل الأساليب بمجرد تطبيق الكلمة الأساسية الثابتة عليها (عدد المعلمات والأنواع هو نفسه). النظر في المثال التالي.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
انتاج |
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) هل يمكننا زيادة التحميل على الطريقة main()؟
نعم، يمكننا الحصول على أي عدد من الطرق الرئيسية في برنامج Java باستخدام طريقة التحميل الزائد.
المزيد من التفاصيل.76) ما هي طريقة التحميل الزائد مع ترقية النوع؟
حسب النوع، يعد الترويج طريقة التحميل الزائد، ونعني أنه يمكن ترقية نوع بيانات واحد إلى نوع آخر ضمنيًا إذا لم يتم العثور على تطابق تام.
كما هو موضح في الرسم البياني أعلاه، يمكن ترقية البايت إلى قصير، أو طويل، أو عائم، أو مزدوج. يمكن ترقية نوع البيانات القصيرة إلى int أو long أو float أو double. يمكن ترقية نوع البيانات char إلى int أو long أو float أو double وما إلى ذلك. النظر في المثال التالي.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }اختبره الآن
انتاج |
40 60
77) ما هو ناتج برنامج جافا التالي؟
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
انتاج |
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
توضيح
هناك طريقتان محددتان بنفس الاسم، أي المبلغ. تقبل الطريقة الأولى النوع الصحيح والطويل بينما تقبل الطريقة الثانية النوع الطويل والعدد الصحيح. المعلمة التي تم تمريرها هي a = 20، b = 20. لا يمكننا تحديد الطريقة التي سيتم استدعاؤها لأنه لا يوجد تمييز واضح مذكور بين العدد الصحيح الحرفي والحرفي الطويل. هذه هي حالة الغموض. لذلك، سوف يلقي المترجم خطأ.
Java الأساسية - مفاهيم OOPs: طريقة تجاوز أسئلة المقابلة
78) ما هو أسلوب التجاوز:
إذا كانت فئة فرعية توفر تطبيقًا محددًا لطريقة تم توفيرها بالفعل بواسطة فئتها الأصلية، فتعرف باسم 'تجاوز الطريقة'. يتم استخدامه لتعدد الأشكال في وقت التشغيل ولتنفيذ طرق الواجهة.
قواعد تجاوز الطريقة
- يجب أن يكون للطريقة نفس الاسم الموجود في الفئة الأصل.
- يجب أن يكون للطريقة نفس التوقيع الموجود في الفئة الأصل.
- يجب أن يكون لفئتين علاقة IS-A بينهما.
79) هل يمكننا تجاوز الطريقة الثابتة؟
لا، لا يمكنك تجاوز الطريقة الثابتة لأنها جزء من الفئة، وليس الكائن.
80) لماذا لا نستطيع تجاوز الطريقة الثابتة؟
وذلك لأن الطريقة الثابتة هي جزء من الفئة، وهي مرتبطة بالفئة، في حين أن طريقة المثيل مرتبطة بالكائن، ويحصل الثابت على الذاكرة في منطقة الفئة، ويحصل المثيل على الذاكرة في الكومة.
81) هل يمكننا تجاوز طريقة التحميل الزائد؟
نعم.
82) الفرق بين طريقة الحمولة الزائدة والتجاوز.
طريقة التحميل الزائد | تجاوز الأسلوب |
---|---|
1) التحميل الزائد للطريقة يزيد من سهولة قراءة البرنامج. | يوفر تجاوز الطريقة التنفيذ المحدد للطريقة التي توفرها فئتها الفائقة بالفعل. |
2) يحدث التحميل الزائد للطريقة داخل الفصل. | يحدث تجاوز الأسلوب في فئتين لديهما علاقة IS-A بينهما. |
3) في هذه الحالة، يجب أن تكون المعلمات مختلفة. | في هذه الحالة، يجب أن تكون المعلمات هي نفسها. |
83) هل يمكننا تجاوز الطرق الخاصة؟
لا، لا يمكننا تجاوز الأساليب الخاصة لأن نطاق الأساليب الخاصة يقتصر على الفصل ولا يمكننا الوصول إليها خارج الفصل.
84) هل يمكننا تغيير نطاق الطريقة المتجاوزة في الفئة الفرعية؟
نعم، يمكننا تغيير نطاق الطريقة التي تم تجاوزها في الفئة الفرعية. ومع ذلك، يجب أن نلاحظ أنه لا يمكننا تقليل إمكانية الوصول إلى هذه الطريقة. يجب الاهتمام بالنقطة التالية أثناء تغيير إمكانية الوصول إلى الطريقة.
- يمكن تغيير الخاص إلى محمي أو عام أو افتراضي.
- يمكن تغيير المحمية إلى عامة أو افتراضية.
- يمكن تغيير الإعداد الافتراضي إلى عام.
- سيظل الجمهور دائمًا علنيًا.
85) هل يمكننا تعديل جملة الرميات الخاصة بطريقة الطبقة الفائقة أثناء تجاوزها في الفئة الفرعية؟
نعم، يمكننا تعديل جملة الرميات الخاصة بطريقة الطبقة الفائقة أثناء تجاوزها في الفئة الفرعية. ومع ذلك، هناك بعض القواعد التي يجب اتباعها أثناء التجاوز في حالة معالجة الاستثناء.
- إذا لم تعلن طريقة الفئة الفائقة عن استثناء، فلن تتمكن طريقة تجاوز الفئة الفرعية من الإعلان عن الاستثناء المحدد، ولكن يمكنها الإعلان عن الاستثناء الذي لم يتم التحقق منه.
- إذا أعلنت طريقة الفئة الفائقة عن استثناء، فيمكن لطريقة تجاوز الفئة الفرعية أن تعلن عن نفس الاستثناء أو فئة فرعية أو لا يوجد استثناء ولكن لا يمكنها الإعلان عن استثناء الأصل.
86) ما هو ناتج برنامج جافا التالي؟
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
انتاج |
Base class method called with integer a = 10
توضيح
يتم تحميل الطريقة () بشكل زائد في الفئة Base بينما يتم اشتقاقها في الفئة المشتقة بالنوع المزدوج كمعلمة. في استدعاء الأسلوب، يتم تمرير العدد الصحيح.
87) هل يمكن أن يكون لديك وظائف افتراضية في جافا؟
نعم، جميع الوظائف في Java افتراضية.
88) ما هو نوع الإرجاع المتغير؟
الآن، منذ Java5، من الممكن تجاوز أي طريقة عن طريق تغيير نوع الإرجاع إذا كان نوع الإرجاع لطريقة تجاوز الفئة الفرعية هو نوع فئة فرعية. ومن المعروف باسم نوع الإرجاع المتغير. يحدد نوع الإرجاع المتغير أن نوع الإرجاع قد يختلف في نفس اتجاه الفئة الفرعية.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }اختبره الآن
Output: welcome to covariant return typeالمزيد من التفاصيل.
89) ما هو ناتج برنامج جافا التالي؟
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
انتاج |
Derived method called ...
توضيح
يتم تجاوز طريقة الفئة الأساسية، أي baseMethod() في الفئة المشتقة. في فئة الاختبار، يشير المتغير المرجعي b (من النوع الأساسي) إلى مثيل الفئة المشتقة. هنا، يتم تحقيق تعدد الأشكال في وقت التشغيل بين الفئة الأساسية والمشتقة. في وقت الترجمة، يتم التحقق من وجود الأسلوب baseMethod في الفئة الأساسية، إذا كان موجودًا، فسيتم تجميع البرنامج وإلا فسيتم عرض خطأ المحول البرمجي. في هذه الحالة، يكون baseMethod موجودًا في الفئة الأساسية؛ لذلك، يتم تجميعه بنجاح. ومع ذلك، في وقت التشغيل، فإنه يتحقق مما إذا كان قد تم تجاوز الأسلوب الأساسي بواسطة فئة مشتقة، إذا كان الأمر كذلك، فسيتم استدعاء أسلوب الفئة المشتقة وإلا فسيتم استدعاء أسلوب الفئة الأساسية. في هذه الحالة، تتجاوز الفئة المشتقة الطريقة الأساسية؛ لذلك، يتم استدعاء أسلوب الفئة المشتقة.
Java الأساسية - مفاهيم OOPs: أسئلة المقابلة للكلمات الرئيسية النهائية
90) ما هو المتغير النهائي؟
في Java، يتم استخدام المتغير النهائي لتقييد المستخدم من تحديثه. إذا قمنا بتهيئة المتغير النهائي، فلن نتمكن من تغيير قيمته. بمعنى آخر، يمكننا القول أن المتغير النهائي بمجرد تعيينه لقيمة ما، لا يمكن تغييره بعد ذلك. لا يمكن تعيين المتغير النهائي الذي لم يتم تعيينه لأي قيمة إلا من خلال مُنشئ الفئة.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of classاختبره الآن
Output:Compile Time Errorالمزيد من التفاصيل.
91) ما هي الطريقة النهائية؟
إذا قمنا بتغيير أي طريقة إلى طريقة نهائية، فلا يمكننا تجاوزها. المزيد من التفاصيل.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }اختبره الآن
Output:Compile Time Error
92) ما هو الفصل النهائي؟
إذا جعلنا أي فئة نهائية، فلا يمكننا أن نرثها في أي من الفئات الفرعية.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }اختبره الآن
Output:Compile Time Errorالمزيد من التفاصيل.
93) ما هو المتغير الفارغ النهائي؟
يُعرف المتغير النهائي، الذي لم تتم تهيئته في وقت الإعلان، بالمتغير الفارغ النهائي. لا يمكننا تهيئة المتغير الفارغ النهائي مباشرة. بدلاً من ذلك، يتعين علينا تهيئته باستخدام مُنشئ الفئة. وهو مفيد في حالة وجود بعض البيانات لدى المستخدم والتي لا يجب على الآخرين تغييرها، على سبيل المثال، رقم PAN. خذ بعين الاعتبار المثال التالي:
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }المزيد من التفاصيل.
94) هل يمكننا تهيئة المتغير الفارغ النهائي؟
نعم، إذا لم تكن ثابتة، فيمكننا تهيئتها في المُنشئ. إذا كان متغيرًا نهائيًا فارغًا ثابتًا، فيمكن تهيئته فقط في الكتلة الثابتة. المزيد من التفاصيل.
95) هل يمكنك إعلان الطريقة الرئيسية على أنها نهائية؟
نعم، يمكننا أن نعلن عن الطريقة الرئيسية باعتبارها public static Final void main(String[] args){}.
96) ما هو ناتج برنامج جافا التالي؟
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
انتاج |
20
توضيح
بما أن i هو المتغير النهائي الفارغ. يمكن تهيئته مرة واحدة فقط. لقد قمنا بتهيئته إلى 20. لذلك، ستتم طباعة 20.
97) ما هو ناتج برنامج جافا التالي؟
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
انتاج |
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
توضيح
طريقة getDetails() نهائية؛ لذلك لا يمكن تجاوزه في الفئة الفرعية.
98) هل يمكننا أن نعلن المنشئ نهائيا؟
لا يمكن أبدًا إعلان المنشئ نهائيًا لأنه لم يتم توريثه أبدًا. البنائين ليسوا أساليب عادية. لذلك، ليس هناك أي معنى للإعلان عن المنشئين على أنهم نهائيون. ومع ذلك، إذا حاولت القيام بذلك، فسوف يقوم المترجم بإلقاء خطأ.
99) هل يمكننا أن نعلن أن الواجهة نهائية؟
لا، لا يمكننا أن نعلن أن الواجهة نهائية لأنه يجب تنفيذ الواجهة بواسطة فئة ما لتوفير تعريفها. ولذلك، ليس هناك أي معنى لجعل الواجهة نهائية. ومع ذلك، إذا حاولت القيام بذلك، سيظهر المترجم خطأ.
100) ما الفرق بين الطريقة النهائية والطريقة المجردة؟
الفرق الرئيسي بين الطريقة النهائية والطريقة المجردة هو أن الطريقة المجردة لا يمكن أن تكون نهائية لأننا نحتاج إلى تجاوزها في الفئة الفرعية لإعطاء تعريفها.