"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > ما هو تعدد الأشكال؟ استكشاف العلاقات بين النوع والكائن في Java

ما هو تعدد الأشكال؟ استكشاف العلاقات بين النوع والكائن في Java

تم النشر بتاريخ 2024-12-21
تصفح:627

عندما كنت أدرس جافا، واجهت مفهوم تعدد الأشكال. لدي ميل إلى فهم المبادئ الأساسية قبل الخوض في الاستخدام العملي، لذلك قمت بتوثيق تفسيري هنا.

التفسيرات الشائعة لتعدد الأشكال التي رأيتها

المعنى الأصلي لتعدد الأشكال هو "التنوع". ومع ذلك، في سياق هذه المقالة، فإنه يشير إلى قدرة المتغير على الاحتفاظ بكائنات من أنواع مختلفة، طالما أن هناك علاقة من خلال وراثة الفئة أو تنفيذ الواجهة، دون التسبب في أخطاء.

مطابقة النوع النموذجي

بشكل عام، نوع المتغير يطابق نوع الكائن الذي يشير إليه.

Animal animal = new Animal();

ومع ذلك، عندما يقوم الكائن بتوسيع فئة ما، يمكن التعامل مع المتغير كنوع الفئة الفائقة.

Animal animal = new Dog(); // Dog extends Animal

علاوة على ذلك، إذا كان الكائن ينفذ واجهة، فيمكن معاملته كنوع الواجهة.

// Interface definition
interface Animal {
    void makeSound(); // Method in the interface
}

// Classes implementing the interface
class Dog implements Animal {
    public void makeSound() {
        System.out.println("Woof!"); // Dog-specific implementation
    }
}

class Cat implements Animal {
    public void makeSound() {
        System.out.println("Meow!"); // Cat-specific implementation
    }
}

// Main method
public class Main {
    public static void main(String[] args) {
        // Assign objects to variables of the interface type
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        // Call the interface method
        myDog.makeSound(); // Outputs "Woof!"
        myCat.makeSound(); // Outputs "Meow!"
    }
}

يسمح لنا هذا بالتعامل مع فئات مختلفة بنفس النوع، مما يتيح البرمجة المرنة.

ما هو النوع؟

أثناء مناقشة كيفية اختلاف نوع المتغير ونوع الكائن، فإنه يثير السؤال: ما هو "النوع" بالضبط؟ بناءً على تحليلي، توصلت إلى أن النوع يخدم الأغراض التالية:

  • التصريح: يحدد نوع البيانات المخزنة في منطقة الذاكرة.
  • النوع: يحدد كيفية استخدام البيانات المخزنة.

بالرجوع إلى المثال السابق:

Animal animal = new Dog(); // Dog extends Animal

يعني هذا أنه تم تخصيص الذاكرة للكلب، لكن المتغير يفسر المحتوى على أنه حيوان. يمكن تصور المفهوم على النحو التالي:

What Is Polymorphism? Exploring Type-Object Relations in Java

يعمل النوع كعدسة مرشح، حيث يحدد كيفية إدراك البيانات. من خلال تغيير العدسة، يمكنك التركيز على الطرق الشائعة في الفئة الفائقة أو طرق محددة عبر الواجهات.

لماذا لا نعلن دائمًا مع الطبقة المتفوقة؟

قد يتساءل المرء لماذا لا نعلن دائمًا عن المتغيرات مع الفئة الفائقة إذا كانت ميزة تعدد الأشكال هي التعامل مع الأساليب الشائعة عبر الفئات. والسبب هو أن الذاكرة يتم تخصيصها فقط لبيانات الفئة الفائقة في مثل هذه الحالات.

What Is Polymorphism? Exploring Type-Object Relations in Java

بينما من الممكن تحويل فئة فرعية إلى فئة فائقة (upcasting)، فإن العكس ليس صحيحًا. وذلك لأن الفئة الفرعية تتضمن بيانات من الفئة الفائقة بالإضافة إلى بياناتها الفريدة. لذلك، يتم تخصيص الذاكرة مسبقًا للفئة الفرعية، مما يسمح باستخدام الأساليب الخاصة بالفئة الفرعية من خلال البث.

في حالة الواجهات

تعمل الواجهات أيضًا كأنواع، ودورها كعدسات تصفية لمعالجة البيانات المخزنة في ذاكرة الكائن يشبه من الناحية المفاهيمية دور الفئات. يتم تحديد الأساليب التي يتم استدعاؤها من خلال الواجهة حسب نوع الكائن، وليس نوع المتغير (الربط الديناميكي). وهذا يعزز فكرة أن نوع المتغير يعمل فقط كمرشح، مما يسمح لنا باستخدام البيانات التي تمت تصفيتها.

خاتمة

يعد تعدد الأشكال مفيدًا في السيناريوهات التي تحتاج فيها العمليات المشتركة إلى توحيد مع الاستفادة أيضًا من الخصائص الفردية. من خلال استكشافي، اكتسبت فهمًا أفضل أنه بينما يظل تخطيط ذاكرة الكائن محددًا حسب نوعه، فإن نوع المتغير يتحكم في كيفية تفسير تلك الذاكرة - وهو إدراك مهم بالنسبة لي.

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/yo-shi/what-is-polymorphism-exploring-type-and-object-nmh nmh؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3