1. في إعلان الفئة، استخدم الكلمة الأساسية يمتد لإنشاء فئة فرعية من الفئة. يعلن الفصل أنه يستخدم واجهة واحدة أو أكثر من خلال تطبيق الكلمة الأساسية.
يعني الامتداد وراثة فئة معينة. بعد الوراثة، يمكنك استخدام أساليب الفئة الأصل، أو يمكنك تجاوز أساليب الفئة الأصل؛ ويعني التنفيذ أن طرق الواجهة تكون فارغة بشكل عام ويجب إعادة كتابتها قبل أن تكون كذلك مستخدم.
2. الامتداد هو وراثة الفئة الأصلية طالما لم يتم الإعلان عن الفئة على أنها نهائية أو تم تعريفها على أنها مجردة، فلا تدعم JAVA الوراثة المتعددة، ولكن يمكن تنفيذها باستخدام الواجهات في هذه الحالة، يجب استخدام الأدوات. يمكن للوراثة أن ترث فئة فقط، ولكن يمكن للأدوات تنفيذ واجهات متعددة، فقط قم بفصلها بفواصل
انسخ رمز الكود كما يلي:
تمتد الفئة A إلى B وتطبق C وD وE
بعد الدراسة لفترة طويلة، فهمت أخيرًا التنفيذ اليوم، وهو في الواقع بسيط جدًا. ما عليك سوى إلقاء نظرة على الأمثلة التالية
بعض مفاهيم الواجهات
<!--[if !supportLineBreakNewLine]-->
انسخ رمز الكود كما يلي:
عداء الواجهة الداخلية العامة
{
معرف كثافة العمليات = 1؛
تشغيل باطل ()؛
}
واجهة الحيوان تمتد عداء
{
التنفس باطلة()؛
}
فئة الأسماك تنفذ الحيوان
{
تشغيل الفراغ العام ()
{
System.out.println("السمكة تسبح");
}
متنفس الفراغ العام ()
{
System.out.println("السمك يغلي");
}
}
مجردة LandAnimal تنفذ الحيوان
{
متنفس الفراغ العام ()
{
System.out.println("الحيوان الأرضي يتنفس");
}
}
يقوم الطالب بتمديد الشخص الذي يقوم بتنفيذ العداء
{
...
تشغيل الفراغ العام ()
{
System.out.println("الطالب قيد التشغيل");
}
...
}
واجهة الطيارة
{
ذبابة باطلة () ؛
}
فئة الطيور تنفذ Runner، Flyer
{
تشغيل الفراغ العام ()
{
System.out.println("الطائر يركض");
}
ذبابة الفراغ العام ()
{
System.out.println("الطائر يطير");
}
}
فئة TestFish
{
الفراغ العام الثابت الرئيسي (سلسلة الحجج [])
{
Fish f = new Fish();
كثافة العمليات ي = 0;
j = Runner.ID;
j = f.ID;
}
}
ملاحظات حول تنفيذ الواجهة:
أ. لتنفيذ واجهة يعني تنفيذ جميع أساليب الواجهة (باستثناء الفئات المجردة).
ب. الأساليب في الواجهة مجردة.
ج. يمكن لفئات متعددة غير مرتبطة تنفيذ نفس الواجهة، ويمكن لفئة واحدة تنفيذ واجهات متعددة غير مرتبطة.
================================================================================================== =========
الفرق بين يمتد وينفذ
الامتداد هو وراثة الفئة الأصلية طالما لم يتم الإعلان عن الفئة على أنها نهائية أو تم تعريفها على أنها مجردة، فلا تدعم JAVA الوراثة المتعددة، ولكن يمكن تنفيذها باستخدام الواجهات. يجب استخدام الأدوات. يمكن أن يرث الوراثة فئة واحدة فقط، ولكن يمكن للأدوات تنفيذ واجهات متعددة، فقط قم بفصلها بفواصل على سبيل المثال
تمتد الفئة A إلى B وتطبق C وD وE
يعلن الفصل أنه يستخدم واجهة واحدة أو أكثر من خلال تطبيق الكلمة الأساسية. في إعلان الفئة، استخدم الكلمة الأساسية يمتد لإنشاء فئة فرعية من الفئة.
انسخ رمز الكود كما يلي:
اسم الفئة الفرعية يمتد اسم الفئة الأصل ويطبق اسم الواجهة
{...
}
================================================================================================== =========
A a = new B(); ونتيجة لذلك، a هو مثيل للفئة A ولا يمكنه الوصول إلا إلى الأساليب الموجودة في A. فما الفرق عن A a = new A();؟
================================================================================================== ========
الفئة ب تمتد أ
بعد الميراث، عادة ما يتم تحديد بعض الأعضاء أو الأساليب غير الموجودة في الفئة الأصل.
أ أ = جديد ب()؛
هذا جيد، قم بتحميله.
a هو مثيل لكائن فئة أصل، وبالتالي لا يمكنه الوصول إلى الأعضاء الجدد أو الأساليب المحددة بواسطة الفئة الفرعية.
================================================================================================== ========
إذا تم تعريفها مثل هذا:
فئة أ {
كثافة العمليات أنا؛
باطلة و () {}
}
الفئة ب تمتد أ {
كثافة العمليات ي؛
باطلة و (){}//أعد الكتابة
باطلة ز () {}
}
ثم:
ب ب = جديد ب()؛
b هو مثيل لكائن فئة فرعية، ولا يمكنه الوصول إلى خصائصه وأساليبه فحسب، بل يمكنه أيضًا الوصول إلى خصائص وأساليب الفئة الأصلية. أشياء مثل bi وbj وbf() وbg() كلها قانونية. في هذا الوقت، يتم الوصول إلى bf() وf() في B
أ أ = جديد ب()؛
على الرغم من أن a يستخدم مُنشئ B، إلا أنه يصبح مثيلًا لكائن الفئة الأصلية بعد البث ولا يمكنه الوصول إلى خصائص وأساليب الفئة الفرعية. ai,af() قانونية، لكن aj,ag() غير قانونية. في هذا الوقت، الوصول إلى af() هو الوصول إلى f() في B
================================================================================================== ========
A a = new B(); يحتوي هذا البيان في الواقع على ثلاث عمليات:
(1) أ أ؛
قم بتعريف a ككائن فئة أصل، مجرد مرجع، بدون تخصيص مساحة
(2) درجة الحرارة B = جديد B()؛
يتم إنشاء مثيل لكائن من الفئة B من خلال مُنشئ الفئة B، أي أنه تمت تهيئته
(3) أ = (أ) درجة الحرارة؛
قم بتحويل درجة حرارة كائن الفئة الفرعية إلى كائن فئة غير أصلي وتعيينه إلى a.
بعد العمليات الثلاث المذكورة أعلاه، أصبح a تمامًا مثيلًا للفئة A.
غالبًا ما تحتوي الفئات الفرعية على خصائص وطرق أكثر من الفئات الأصلية، حيث يؤدي التحميل إلى تجاهلها فقط، وهو أمر آمن، بينما يزيدها البث السفلي في بعض الأحيان، وهو أمر غير آمن عادةً.
================================================================================================== =========
يجب أن يتوافق af() مع الطريقة f() للفئة B
بعد استدعاء المُنشئ لإنشاء مثيل، تم تحديد المدخل إلى الطريقة المقابلة.
منذ ذلك الحين، على الرغم من تحميل a كفئة A، إلا أن الطريقة التي تم تجاوزها f() لا تزال هي الطريقة f() للفئة B. أي أن كل كائن يعرف الطريقة التي يجب أن يستدعيها.
أ a1 = جديد ب()؛
أ a2 = جديد C();
على الرغم من أن a1 وa2 كلاهما كائنات من الفئة A، إلا أن f() الخاص بهما مختلفان. وهذا هو بالضبط تجسيد تعدد الأشكال المذكور في الطابق الأول.
تم شرح مثل هذه المشكلات بشكل واضح جدًا في "أفكار برمجة جافا"
تنفذ بشكل عام الواجهة. يمتد هو فئة الموروثة. تحتوي الواجهات عمومًا على إعلانات الطرق فقط ولكن لا تحتوي على تعريفات، لذلك من المنطقي أن تشير Java على وجه التحديد إلى تنفيذ الواجهات، لأن الميراث يعني أن الفئة الأصلية قد نفذت الأساليب، في حين أن الواجهات لا تنفذ الأساليب الخاصة بها، بل الإعلانات فقط، أي لا يحتوي رأس الطريقة على نص الطريقة. لذلك، يمكنك أن تفهم أن الواجهة هي فئة فرعية تنفذ إعلانات الأسلوب الخاصة بها بدلاً من أن ترث أساليبها. ومع ذلك، يمكن أن تحتوي أساليب الفئة العامة على أجسام طرق، لذا فمن المنطقي أن نطلق عليها اسم الميراث. يمكن أن يؤدي استيراد الحزمة إلى استخدام كافة الفئات التي تنفذ واجهات غير الواجهات فيها. ثم عليك أن تقرر ما إذا كنت تريد تنفيذ الواجهة أم لا، إذا كنت تريد استخدامها، فلا يمكنك استدعاء الواجهة دون تنفيذها، لأن الواجهة عبارة عن مواصفات، ومجموعة من إعلانات الطريقة بدون نص الطريقة. اسمحوا لي أن أقدم لكم مثالاً: يمكن مقارنة الواجهة بالبروتوكول، على سبيل المثال، إذا قلت أن البروتوكول "يقتل"، فيمكنك استخدام المنجل لتنفيذ هذه الواجهة بالطبع، يمكنك أيضًا استخدام الاستيلاء لتنفيذ واجهة القتل، لكن لا يمكنك استخدام واجهة القتل لقتل الأشخاص، لأن واجهة القتل هي مجرد وصف للوظيفة وبروتوكول، وكيفية القيام بذلك تعتمد على فئة التنفيذ . لذا، إذا كانت هناك واجهة في الحزمة، فلن يتعين عليك تنفيذها. هذا لا يؤثر على استخدامك للفئات الأخرى.
ينفذ
التنفيذ هي كلمة أساسية تستخدمها الفئة لتنفيذ الواجهة، ويتم استخدامها لتنفيذ الأساليب المجردة المحددة في الواجهة. على سبيل المثال: الأشخاص عبارة عن واجهة، ولها طريقة القول. الواجهة العامة People(){ public say();} لكن الواجهة لا تحتوي على نص طريقة. لا يمكن تنفيذ نص الطريقة إلا من خلال فئة معينة. على سبيل المثال، تطبق الطبقة الصينية واجهة الأشخاص. الطبقة العامة الصينية تنفذ الناس{ public say() {System.out.println("Hello!");}}
في Java، تعني كلمة "التنفيذ" أن فئة فرعية ترث فئة أصل، على سبيل المثال، ترث الفئة "أ" الفئة "ب" ويتم كتابتها على أنها فئة "أ" تنفذ "ب"{}.
الفرق من يمتد
يمتد، يمكنك تنفيذ الفئة الأصل، أو يمكنك استدعاء الفئة الأصل لتهيئة this.parent(). وسوف يحل محل المتغيرات أو الوظائف المحددة بواسطة الفئة الأصل. وميزة ذلك هي أن المهندس المعماري يمكنه تحديد الواجهة والسماح للمهندس بتنفيذها. يتم تقليل كفاءة التطوير وتكاليف التطوير للمشروع بأكمله بشكل كبير.
تنفذ وتنفذ الفئة الأصلية ولا يمكن للفئات الفرعية تجاوز أساليب أو متغيرات الفئة الأصلية. حتى لو كانت الفئة الفرعية تحدد نفس المتغيرات أو الوظائف مثل الفئة الأصلية، فسيتم استبدالها بالفئة الأصلية.
يعتمد الاستخدام المحدد لهذين التطبيقين على الوضع الفعلي للمشروع ويجب تنفيذه، ولا يمكن تعديل التطبيقات إلا على الواجهة المحددة، أو يمكن تعديلها من أجل توسيع نطاق الاستخدام.
<!--[endif]-->