ال ممتاز الكلمة الأساسية في Java هي متغير مرجعي يستخدم للإشارة إلى كائن الفئة الأصل المباشر.
عندما تقوم بإنشاء مثيل للفئة الفرعية، يتم إنشاء مثيل للفئة الأصلية ضمنيًا والذي تتم الإشارة إليه بواسطة متغير مرجعي فائق.
استخدام Java Super Keyword
- يمكن استخدام super للإشارة إلى متغير مثيل الفئة الأصل المباشر.
- يمكن استخدام super لاستدعاء طريقة الفئة الأصلية المباشرة.
- يمكن استخدام super() لاستدعاء مُنشئ الفئة الأصل المباشر.
1) يتم استخدام super للإشارة إلى متغير مثيل الفئة الأصل المباشر.
يمكننا استخدام الكلمة الأساسية الفائقة للوصول إلى عضو البيانات أو حقل الفصل الأصلي. يتم استخدامه إذا كان الفصل الأصلي والفصل الفرعي لهما نفس الحقول.
تقطيع المصفوفة جافا
class Animal{ String color='white'; } class Dog extends Animal{ String color='black'; void printColor(){ System.out.println(color);//prints color of Dog class System.out.println(super.color);//prints color of Animal class } } class TestSuper1{ public static void main(String args[]){ Dog d=new Dog(); d.printColor(); }}اختبره الآن
انتاج:
black white
في المثال أعلاه، كلا الفئتين Animal وDog لهما لون خاصية مشترك. إذا قمنا بطباعة خاصية اللون، فسوف تتم طباعة لون الفئة الحالية بشكل افتراضي. للوصول إلى الخاصية الأصل، نحتاج إلى استخدام الكلمة الأساسية super.
2) يمكن استخدام super لاستدعاء طريقة الفصل الأصلي
يمكن أيضًا استخدام الكلمة الأساسية super لاستدعاء طريقة الفئة الأصلية. يجب استخدامه إذا كانت الفئة الفرعية تحتوي على نفس طريقة الفئة الأصلية. بمعنى آخر، يتم استخدامه إذا تم تجاوز الطريقة.
class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void eat(){System.out.println('eating bread...');} void bark(){System.out.println('barking...');} void work(){ super.eat(); bark(); } } class TestSuper2{ public static void main(String args[]){ Dog d=new Dog(); d.work(); }}اختبره الآن
انتاج:
eating... barking...
في المثال أعلاه، Animal وDog، كلا الفئتين لديهما طريقة Eat() إذا قمنا باستدعاء طريقة Eat() من فئة Dog، فسوف تستدعي طريقة Eat() من فئة Dog بشكل افتراضي لأن الأولوية تُعطى إلى local.
لاستدعاء طريقة الفئة الأصل، نحتاج إلى استخدام الكلمة الأساسية الفائقة.
3) يتم استخدام super لاستدعاء مُنشئ الفئة الأصلية.
يمكن أيضًا استخدام الكلمة الأساسية super لاستدعاء مُنشئ الفئة الأصل. دعونا نرى مثالا بسيطا:
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ super(); System.out.println('dog is created'); } } class TestSuper3{ public static void main(String args[]){ Dog d=new Dog(); }}اختبره الآن
انتاج:
animal is created dog is created
ملحوظة: تتم إضافة super() في كل مُنشئ فئة تلقائيًا بواسطة المترجم إذا لم يكن هناك super() أو this().
كما نعلم جيدًا أن المنشئ الافتراضي يتم توفيره بواسطة المترجم تلقائيًا في حالة عدم وجود مُنشئ. ولكنه يضيف أيضًا super() كعبارة أولى.
مثال آخر على الكلمة الرئيسية super حيث يتم توفير super() بواسطة المترجم ضمنيًا.
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
مثال فائق: الاستخدام الحقيقي
دعونا نرى الاستخدام الحقيقي للكلمة الرئيسية الفائقة. هنا، ترث فئة Emp فئة الشخص، لذلك سيتم توريث جميع خصائص الشخص إلى Emp افتراضيًا. لتهيئة كافة الخاصية، نستخدم مُنشئ الفئة الأصل من فئة فرعية. بهذه الطريقة، نحن نعيد استخدام مُنشئ الفئة الأصل.
class Person{ int id; String name; Person(int id,String name){ this.id=id; this.name=name; } } class Emp extends Person{ float salary; Emp(int id,String name,float salary){ super(id,name);//reusing parent constructor this.salary=salary; } void display(){System.out.println(id+' '+name+' '+salary);} } class TestSuper5{ public static void main(String[] args){ Emp e1=new Emp(1,'ankit',45000f); e1.display(); }}اختبره الآن
انتاج:
1 ankit 45000