سؤال

ما هو الفرق بين مجردة وظيفة الظاهري وظيفة ؟ في هذه الحالات ينصح استخدام الظاهري أو مجردة ؟ واحد الذي هو أفضل نهج ؟

هل كانت مفيدة؟

المحلول

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

وظيفة افتراضية, ، يقول بشكل أساسي نظرة، وهنا الوظيفة التي قد تكون أو لا تكون جيدة بما يكفي لفئة الطفل. لذلك إذا كان ذلك جيدا بما فيه الكفاية، استخدم هذه الطريقة، إن لم يكن، ثم تجاوزني، وتوفير وظائفك الخاصة.

نصائح أخرى

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

توفر الوظيفة الافتراضية تطبيقا افتراضيا ويمكن أن يوجد في فئة مجردة أو فئة غير مجدية.

لذلك على سبيل المثال:

public abstract class myBase
{
    //If you derive from this class you must implement this method. notice we have no method body here either
    public abstract void YouMustImplement();

    //If you derive from this class you can change the behavior but are not required to
    public virtual void YouCanOverride()
    { 
    }
}

public class MyBase
{
   //This will not compile because you cannot have an abstract method in a non-abstract class
    public abstract void YouMustImplement();
}
  1. فقط abstract الفصول يمكن أن يكون abstract أفراد.
  2. غيرabstract الطبقة التي ترث من abstract صف دراسي يجب override إنه abstract أفراد.
  3. أ abstract العضو ضمنيا virtual.
  4. أ abstract لا يمكن للعضو تقديم أي تنفيذ (abstract يسمى pure virtual في بعض اللغات).

يجب عليك دائما تجاوز وظيفة مجردة.

هكذا:

  • وظائف مجردة - متي يجب أن يوفر المورث تنفيذه
  • افتراضية - متي الأمر متروك للواسور لاتخاذ قرار

وظيفة مجردة:

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

الوظيفة الافتراضية:

  1. يمكن الإعلان عنها داخل مجردة وكذلك فئة غير مجردة.
  2. أنه يحتوي على تنفيذ الطريقة.
  3. قد يتم تجاوزه.

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

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

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

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

التفسير:مع القياس.نأمل أنها سوف تساعدك.

السياق

أنا أعمل على 21 طابق من المبنى.و أنا بجنون العظمة حول النار.كل والآن مرة أخرى في مكان ما في العالم ، والنار مشتعلة أسفل مكشطة السماء.ولكن لحسن الحظ لدينا دليل التعليمات في مكان ما هنا على ما يجب القيام به في حالة الحريق:

FireEscape()

  1. لا جمع أمتعتهم
  2. سيرا على الأقدام إلى الحريق
  3. الخروج من المبنى

هذا هو في الأساس الظاهري طريقة تسمى FireEscape()

أسلوب الظاهري

هذه الخطة هو جيد جدا 99% من هذه الظروف.إنها الخطة الأساسية التي تعمل.لكن هناك 1% فرصة أن الحريق تم حظر أو التالفة في حال كنت مشدود بالكامل و سوف تصبح نخب إلا إذا كنت تأخذ بعض إجراءات جذرية.مع طرق افتراضية يمكنك أن تفعل ذلك فقط:يمكنك تجاوز الأساسية FireEscape() خطة مع النسخة الخاصة بك من الخطة:

  1. تشغيل نافذة
  2. القفز من النافذة
  3. المظلة بأمان إلى أسفل

وبعبارة أخرى طرق افتراضية توفر الخطة الأساسية التي يمكن أن تنقضها إذا كنت بحاجة إلى.فرعية يمكن تجاوز فئة الأصل الظاهري الأسلوب إذا كان مبرمج رأت ذلك مناسبا.

الأساليب التجريدية

ليس كل المنظمات هي بئر.بعض المنظمات لا تفعل النار التدريبات.ليس لديهم عموما الهروب من السياسة.كل رجل لنفسه.إدارة مهتما فقط في هذه السياسة القائمة.

وبعبارة أخرى, كل شخص القسري لتطوير بلده FireEscape الأسلوب ().رجل واحد سوف يخرج من النار من الفرار.شخص آخر سوف المظلة.شخص آخر سوف تستخدم تكنولوجيا الدفع الصاروخي أن يطير بعيدا عن المبنى.شخص آخر سوف abseil بها.الإدارة لا تهتم كيف يمكنك الهروب طالما لديك الأساسية FireEscape() الخطة - إذا كانوا لا يمكن أن يضمن لك الصحة والسلامة المهنية سوف ينزل على تنظيم مثل طن من الطوب.هذا هو ما هو المقصود من طريقة مجردة.

ما هو الفرق بين الاثنين مرة أخرى ؟

مجردة الطريقة:فئات فرعية هي القسري لتنفيذ الخاصة بهم FireEscape الأسلوب.مع الظاهري الطريقة يكون لديك خطة أساسية في انتظاركم ، ولكن يمكن أن تختار لتنفيذ الخاصة بك لو انها ليست جيدة بما فيه الكفاية.

الآن هذا لم يكن صعبا كان ؟

طريقة مجردة هي طريقة يجب تنفيذها لجعل فئة ملموسة. الإعلان في فئة مجردة (وأي فئة مع طريقة مجردة يجب أن تكون فئة مجردة) ويجب تنفيذها في فئة ملموسة.

الطريقة الافتراضية هي طريقة يمكن تجاوزها في فئة مشتقة باستخدام التجاوز، استبدال السلوك في superclass. إذا لم تتجاوز، فستحصل على السلوك الأصلي. إذا قمت بذلك، فأنت دائما تحصل على السلوك الجديد. هذا يعارض ليس أساليب افتراضية، لا يمكن تجاوزه ولكنه يمكن إخفاء الطريقة الأصلية. يتم ذلك باستخدام new المعدل.

انظر المثال التالي:

public class BaseClass
{
    public void SayHello()
    {
        Console.WriteLine("Hello");
    }


    public virtual void SayGoodbye()
    {
        Console.WriteLine("Goodbye");
    }

    public void HelloGoodbye()
    {
        this.SayHello();
        this.SayGoodbye();
    }
}


public class DerivedClass : BaseClass
{
    public new void SayHello()
    {
        Console.WriteLine("Hi There");
    }


    public override void SayGoodbye()
    {
        Console.WriteLine("See you later");
    }
}

عندما أنا مثيل DerivedClass و اتصل SayHello, ، أو SayGoodbye, ، أحصل على "مرحبا هناك" و "أراك لاحقا". إذا اتصلت HelloGoodbye, أحصل على "مرحبا" و "أراك لاحقا". هذا بسبب SayGoodbye افتراضي، ويمكن استبدالها بالدروس المشتقة. SayHello مخفية فقط، لذلك عندما أسمي ذلك من فئة قاعدة بلدي، أحصل على طريقة الأصلية.

الطرق التجريدية هي الظاهري ضمنيا. يحددون السلوك الذي يجب أن يكون حاضرا، أكثر مثل واجهة لا.

الطرق التجريدية هي دائما افتراضية. لا يمكن أن يكون لديهم تنفيذ.

هذا هو الفرق الرئيسي.

في الأساس، ستستخدم طريقة افتراضية إذا كان لديك التنفيذ "الافتراضي" له وتريد السماح بأحفاد تغيير سلوكه.

مع طريقة مجردة، تقوم بقوة بأحفاد لتوفير تنفيذ.

قمت بإجراء هذا أكثر بساطة من خلال إجراء بعض التحسينات على الفصول التالية (من إجابات أخرى):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestOO
{
    class Program
    {
        static void Main(string[] args)
        {
            BaseClass _base = new BaseClass();
            Console.WriteLine("Calling virtual method directly");
            _base.SayHello();
            Console.WriteLine("Calling single method directly");
            _base.SayGoodbye();

            DerivedClass _derived = new DerivedClass();
            Console.WriteLine("Calling new method from derived class");
            _derived.SayHello();
            Console.WriteLine("Calling overrided method from derived class");
            _derived.SayGoodbye();

            DerivedClass2 _derived2 = new DerivedClass2();
            Console.WriteLine("Calling new method from derived2 class");
            _derived2.SayHello();
            Console.WriteLine("Calling overrided method from derived2 class");
            _derived2.SayGoodbye();
            Console.ReadLine();
        }
    }


    public class BaseClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello\n");
        }
        public virtual void SayGoodbye()
        {
            Console.WriteLine("Goodbye\n");
        }

        public void HelloGoodbye()
        {
            this.SayHello();
            this.SayGoodbye();
        }
    }


    public abstract class AbstractClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello\n");
        }


        //public virtual void SayGoodbye()
        //{
        //    Console.WriteLine("Goodbye\n");
        //}
        public abstract void SayGoodbye();
    }


    public class DerivedClass : BaseClass
    {
        public new void SayHello()
        {
            Console.WriteLine("Hi There");
        }

        public override void SayGoodbye()
        {
            Console.WriteLine("See you later");
        }
    }

    public class DerivedClass2 : AbstractClass
    {
        public new void SayHello()
        {
            Console.WriteLine("Hi There");
        }
        // We should use the override keyword with abstract types
        //public new void SayGoodbye()
        //{
        //    Console.WriteLine("See you later2");
        //}
        public override void SayGoodbye()
        {
            Console.WriteLine("See you later");
        }
    }
}

ربط هي عملية تعيين اسم إلى وحدة التعليمات البرمجية.

التجليد المتأخر يعني أننا نستخدم الاسم، ولكن تأجيل التعيين. بمعنى آخر، نقوم بإنشاء / ذكر الاسم أولا، ودع بعض العملية اللاحقة تعامل مع تعيين الرمز إلى هذا الاسم.

النظر الآن:

  • مقارنة بالبشر، الآلات جيدة حقا في البحث والفرز
  • بالمقارنة مع الآلات، البشر جيدة حقا في الاختراع والابتكار

لذلك، الجواب القصير هو: virtual هي تعليمات ملزمة متأخرة للجهاز (وقت التشغيل) في حين abstract هل تعليمات الربط المتأخرة للإنسان (مبرمج)

بعبارات أخرى، virtual يعني:

"عزيزي مدة العرض, ، ربط التعليمات البرمجية المناسبة لهذا الاسم عن طريق القيام بما تفعله بشكل أفضل: يبحث

بينما abstract يعني:

"عزيزي مبرمج, ، يرجى ربط التعليمات البرمجية المناسبة لهذا الاسم عن طريق القيام بما تفعله بشكل أفضل: في الاختراع

من أجل الإنتهاء، الزائد يعني:

"عزيزي مترجم, ، ربط التعليمات البرمجية المناسبة لهذا الاسم عن طريق القيام بما تفعله بشكل أفضل: فرز”.

يمكنك استخدام الأسلوب الظاهري بشكل أساسي عندما تريد توسيع الذراعين الوظيفة إذا أرادوا ذلك.

يمكنك استخدام طرق مجردة عندما تريد أن يقوم الرائيون بتنفيذ الوظيفة (وفي هذه الحالة ليس لديهم خيار)

لقد رأيت في بعض الأماكن، ويتم تعريف طريقة مجردة على النحو التالي. **

"يجب أن تضطر طريقة مجردة إلى تنفيذها في فئة الطفل"

** شعرت أنها مثل.

ليس من الضروري أن يتم تنفيذ طريقة مجردة في فئة طفل، إذا كانت فئة الطفل مجردة أيضا ..

1) طريقة مجردة غير قادر كن طريقة خاصة. 2) طريقة مجردة غير قادر تنفذ في نفس فئة مجردة.

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

ليس من الضروري تنفيذ طريقة افتراضية في فئة موروثة.

                                 ----------CODE--------------

public abstract class BaseClass
{
    public int MyProperty { get; set; }
    protected abstract void MyAbstractMethod();

    public virtual void MyVirtualMethod()
    {
        var x = 3 + 4;
    }

}
public abstract class myClassA : BaseClass
{
    public int MyProperty { get; set; }
    //not necessary to implement an abstract method if the child class is also abstract.

    protected override void MyAbstractMethod()
    {
        throw new NotImplementedException();
    }
}
public class myClassB : BaseClass
{
    public int MyProperty { get; set; }
    //You must have to implement the abstract method since this class is not an abstract class.

    protected override void MyAbstractMethod()
    {
        throw new NotImplementedException();
    }
}

الطريقة الافتراضية:

  • الظاهري الوسائل التي يمكننا تجاوزها.

  • الوظيفة الافتراضية لديها تنفيذ. عندما نرث الفصل، يمكننا تجاوز الوظيفة الافتراضية وتوفر منطقنا الخاص.

  • يمكننا تغيير نوع العودة الوظيفة الافتراضية أثناء تنفيذ
    وظيفة في فئة الطفل (والتي يمكن القول كمفهوم
    التظليل).

طريقة تجريدية

  • مجردة يعني أننا يجب أن نتجاوزها.

  • وظيفة مجردة ليس لديها تنفيذ ويجب أن تكون في فئة مجردة.

  • لا يمكن الإعلان إلا. هذا يفرض الطبقة المشتقة لتوفير تنفيذها.

  • عضو مجردة افتراضي ضمنيا. يمكن استدعاء الملخص بأنه افتراضي نقي في بعض اللغات.

    public abstract class BaseClass
    { 
        protected abstract void xAbstractMethod();
    
        public virtual void xVirtualMethod()
        {
            var x = 3 + 4;
        }
    } 
    

وظيفة مجردة لا يمكن أن يكون لها هيئة ويجب تجاوزها حسب فصول الأطفال

وظيفة افتراضية سيكون لها هيئة وربما أو لا يتم تجاوزها حسب فصول الأطفال

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

تفسير بسيط - شرح باستخدام التظليل

طريقة تجريدية

أعتقد جورج دبليو بوش. يقول لوهن جنوده: "الذهاب القتال في العراق". وهذا كل شيء. كل ما حدده هو أن القتال يجب القيام به. انه لا يحدد كيف بالضبط سيحدث ذلك. لكنني أقصد، لا يمكنك الخروج و "القتال": ماذا يعني ذلك بالضبط؟ هل أقاتل مع B-52 أو بلدي derringer؟ يتم ترك هذه التفاصيل الخاصة لشخص آخر. هذه طريقة مجردة.

الطريقة الافتراضية

ديفيد بترايوس مرتفع في الجيش. لقد حدد ما يعنيه المعركة:

  1. العثور على العدو
  2. تحييده.
  3. تناول البيرة بعد ذلك

المشكلة هي أنها طريقة عامة للغاية. إنها طريقة جيدة تعمل، ولكن في بعض الأحيان ليست محددة بما فيه الكفاية. الشيء الجيد بالنسبة للبتريوس هو أن أوامره لديها Leeway والنطاق - لقد سمح للآخرين بتغيير تعريفه "القتال"، وفقا لمتطلباتهم الخاصة.

يقرأ Bloggs الوظيفة الخاصة طلب البتريوس ويوضح إذنا لتنفيذ نسخته الخاصة من المعركة، وفقا لمتطلباته الخاصة:

  1. العثور على العدو.
  2. اطلاق النار عليه في الرأس.
  3. اذهب للمنزل
  4. لديك البيرة.

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

  1. العثور على العدو.
  2. ألقي القبض عليه مع بعض رسوم BS ارتكب.
  3. اذهب للمنزل
  4. لديك البيرة.

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

الفرق بين الاثنين

  • جورج بوش لا يثبت أي تفاصيل التنفيذ. يجب توفير ذلك من قبل شخص آخر. هذه طريقة مجردة.

  • بترايوس من ناحية أخرى هل تقديم تفاصيل التنفيذ، لكنه أعطى إذن لمرؤوسه لتجاوز أوامره مع إصدارهم الخاص، إذا كان بإمكانهم التوصل إلى شيء أفضل.

امل ان يساعد.

وظيفة مجردة (طريقة):

● طريقة مجردة هي طريقة تم الإعلان عنها مع الملخص الكلمة الرئيسية.

● ليس له جسم.

● يجب أن تنفذ من قبل الطبقة المشتقة.

● إذا كانت الطريقة مجردة، فينبغي للفئة مجردة.

الوظيفة الافتراضية (الطريقة):

● الطريقة الافتراضية هي الطريقة التي يتم الإعلان عنها مع الظاهري الكلمة الرئيسية ويمكن تجاوزها بواسطة طريقة الفصل الدراسي المشتقة باستخدام الكلمة الأساسية تجاوز.

● الأمر متروك للفئة المشتقة سواء لتجاوزها أم لا.

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

من وجهة نظر وجهة نظر المنحى:

فيما يتعلق طريقة مجردة: عند وضع طريقة مجردة في فئة الوالدين في الواقع، تقول لك فصول الأطفال: مهلا لاحظ أن لديك طريقة توقيع مثل هذا. وإذا كنت تريد استخدامه، يجب أن تنفذ بنفسك!

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

هذه هي بعض الفلسفة مختلفة بين هذا المفهوم في عام OO

لا يوجد شيء استدعاء الطبقة الافتراضية في C #.

للوظائف

  1. وظيفة مجردة لديها فقط التوقيع فقط، يجب أن تتجاوز فئة محرك الأقراص مع الوظيفة.
  2. ستعقد الوظيفة الافتراضية جزءا من الوظائف قد لا تتجاوز فئة محرك الأقراص وفقا للمتطلبات

يمكنك أن تقرر مع الاحتياجات الخاصة بك.

طريقة التجريدية لا تملك تنفيذ. يتم الإعلان عنها في الطبقة الأصل. فئة الطفل هي "مستحيل" لتنفيذ هذه الطريقة.

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

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

الوظيفة الافتراضية (الطريقة في الواقع)، هي وظيفة تعلن بها أيضا، وينبغي أن تنفذ في واحدة من فئات التسلسل الهرمي للميراث.

مثيلات هذه الفئة الموروثة، ورث التنفيذ كذلك، إلا إذا قمت بتنفيذها، في فئة تسلسل هرمي أقل.

من خلفية C ++، C # الظاهري يتوافق مع C ++ الظاهري، في حين أن الطرق المجردة C # تتوافق مع وظيفة V ++ الخالصة

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

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

باستخدام الفصول الدراسية والأساليب المجردة مهمة في الغالب تجنب ذلك من خلال التركيز على تفاصيل التنفيذ عند تصميم الفصول الدراسية، تكون هيكل الطبقات مرتبطا بالمنامآت، لذلك خلق اعتزاز وربط بين الطبقات التي تعاون بينهم.

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

كلاهما يمثل شكل من أشكال تعدد الأشكال في نموذج اتجاه الكائنات.

يمكننا استخدام الطرق المجردة والوظائف الافتراضية معا لدعم نموذج الميراث الجيد.

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

أنا هنا أكتب بعض رمز العينة الأمل في أن يكون هذا مثالا ملموسا إلى حد ما لرؤية سلوكيات الواجهات والفئات المجردة والدروس العادية على مستوى أساسي للغاية. يمكنك أيضا العثور على هذا الرمز في Github كمشروع إذا كنت ترغب في استخدامه كإجراء عرضي: https://github.com/usavas/javaabstractandinterfacedemo.

public interface ExampleInterface {

//    public void MethodBodyInInterfaceNotPossible(){
//    }
    void MethodInInterface();

}

public abstract class AbstractClass {
    public abstract void AbstractMethod();

    //    public abstract void AbstractMethodWithBodyNotPossible(){
    //
    //    };

    //Standard Method CAN be declared in AbstractClass
    public void StandardMethod(){
        System.out.println("Standard Method in AbstractClass (super) runs");
    }
}

public class ConcreteClass
    extends AbstractClass
    implements ExampleInterface{

    //Abstract Method HAS TO be IMPLEMENTED in child class. Implemented by ConcreteClass
    @Override
    public void AbstractMethod() {
        System.out.println("AbstractMethod overridden runs");
    }

    //Standard Method CAN be OVERRIDDEN.
    @Override
    public void StandardMethod() {
        super.StandardMethod();
        System.out.println("StandardMethod overridden in ConcreteClass runs");
    }

    public void ConcreteMethod(){
        System.out.println("Concrete method runs");
    }

    //A method in interface HAS TO be IMPLEMENTED in implementer class.
    @Override
    public void MethodInInterface() {
        System.out.println("MethodInInterface Implemented by ConcreteClass runs");

    //    Cannot declare abstract method in a concrete class
    //    public abstract void AbstractMethodDeclarationInConcreteClassNotPossible(){
    //
    //    }
    }
}

على فهمي:

طرق مجردة:

فقط فئة مجردة يمكن أن تعقد طرق مجردة. أيضا الفئة المشتقة تحتاج إلى تنفيذ الطريقة ولا يتم توفير أي تنفيذ في الفصل.

الأساليب الافتراضية:

يمكن للفئة أن تعلن هذه وتوفر أيضا تنفيذ نفسه. أيضا الفئة المشتقة تحتاج إلى تنفيذ الطريقة لتجاوزها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top