في عالم البرمجة الموجهة للكائنات ، يمكن للفئات تنفيذ واجهات متعددة. ومع ذلك ، عندما تمتلك هذه الواجهات طرقًا ذات توقيعات متطابقة ، فإن السؤال الذي يطرح إليه: كيف يحل المترجم طريقة الواجهة التي يتم تجاوزها؟ لا يميز المترجم بين الأساليب بناءً على أصل الواجهة.
لفهم هذا المفهوم ، دعنا ننظر في المثال التالي: int f () ؛ } الواجهة ب { int f () ؛ } اختبار الفئة ينفذ a ، b { @تجاوز العام int f () { العودة 0 ؛ } }
في هذا السيناريو ، يقوم الاختبار بتنفيذ كل من A و B ، ويحدد كلتا الواجهات طريقة تسمى F () بنفس التوقيع. من خلال تجاوز هذه الطريقة في الاختبار ، يتجاوز الفئة بشكل فعال طريقة F () من كلا الواجهات ، على الرغم من أن توضيح Override واحد فقط موجود. ونتيجة لذلك ، يختار المترجم الطريقة الأولى التي يواجهها ، بغض النظر عن أصل الواجهة. في مثل هذه الحالات ، سيقوم المترجم بالإبلاغ عن خطأ ، لأنه من غير الممكن أن يكون لديك طريقتان بنفس التوقيع ولكن أنواع الإرجاع المختلفة في نفس الفئة.
باطلة الحاضر () ؛ } واجهة ضيف { الحاضر المنطقي () ؛ } فئة قابلة للتنفيذ هدية ، ضيف { @تجاوز Public Void Present () { system.out.println ("الحاضر كهدية!") ؛ } }interface A { int f(); } interface B { int f(); } class Test implements A, B { @Override public int f() { return 0; } }هنا ، هدية. نتيجةً لذلك ، لا يمكن للتقدم تنفيذ كلا الواجهات لأنها تنتهك القواعد الغالبة. ومع ذلك ، فإن عدم التوافق بين توقيعات الطريقة سيؤدي إلى أخطاء التجميع.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3