English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
عندما يكون لدينا كلاسين، واحد يوسع الآخر، إذا كان لديهما نفس الطريقة (بما في ذلك المعلمات والنوع العائد) (مثل العينة)، فإن الطريقة في الفرعية ستغطي الطريقة في الأب.
ذلك بسبب أنه الوراثة. إذا قمنا بإنشاء كائن من الفرعية، فإنه سيتم إنشاء نسخة من أعضاء الكلاس الأب في كائن الفرعية، لذا يمكن استخدام هذين الأسلوبين للاستخدام في كائن الفرعية.
لكن، إذا تم استدعاء الطريقة(عينة)،سيتم تنفيذ طريقة العينة للفرعية لتغطية طريقة الأب.
class Super{ public static void sample(){ System.out.println("طريقة الأب"); } } public class OverridingExample extends Super { public static void sample(){ System.out.println("طريقة الفرعية"); } public static void main(String args[]){ Super obj1 = (Super) new OverridingExample(); OverridingExample obj2 = new OverridingExample(); obj1.sample(); obj2.sample(); } }
نتيجة الظهور
طريقة الأب طريقة الفرعية
عندما يحتوي الكلاس الأب والفرعية على نفس الطريقة (بما في ذلك المعلمات) وكذلك إذا كانت ثابتة أم لا. سيتم تمويه الطريقة في الكلاس الأب بالطريقة في الفرعية.
هذا الميكانيزم يُقصر على "تمويه الطريقة"، على الرغم من أن الكلاس الأب والفرعية لديها طريقة ذات نفس التوقيع الثابت، إلا أنها لا تعتبر تغطية.
class Super{ public static void demo() { System.out.println("هذا هو أساس方法是 الأب"); } } class Sub extends Super{ public static void demo() { System.out.println("هذا هو أساس方法是 الفرعية"); } } public class MethodHiding{ public static void main(String args[]) { MethodHiding obj = new MethodHiding(); Sub.demo(); } }
نتيجة الظهور
هذه هي الطريقة الرئيسية للفرعية
مفتاح التغطية على الطريقة هو، إذا كانت الفئة الأصلية والفرعية لديها طريقة بذات التوقيع، فإنهما كلاهما متاحان للعنصر الفرعي. سيتم تنفيذ الطريقة المناسبة بناءً على نوع الاشارة (المرجع) المستخدم لتخزين العنصر.
SuperClass obj1 = (Super) new SubClass(); obj1.demo() // invokes the demo method of the super class SubClass obj2 = new SubClass (); obj2.demo() //invokes the demo method of the sub class
لكن، في حالة الطرق الصعبة، لأنها لا تنتمي إلى أي مثال، تحتاج إلى استخدام اسم الفئة للوصول.
SuperClass.demo(); SubClass.Demo();
لذلك، إذا كان لديك في الفئة الأصلية والفرعية طريقة صعبة بذات التوقيع، يمكن للعنصر الفرعي أن يستخدم نسخة الطريقة من الفئة الأصلية. لأنها صعبة، يتم حل استدعاء الطريقة في وقت التجميع، لذا لا يمكن تغطية الطريقة الصعبة.
لكن، نظرًا لأن هناك نسخة من الطريقة الثابتة، إذا قمت بتشغيل طريقة الفرعية، فإن طريقة الفئة الأصلية سيتم تعريفها/اخفاءها.