override

 أولاً:مفهوم override :- 

تكمن أهمية هذا المفهوم بأنه تتيح لنا الفرصة بأن ننشئ دالة في التصنيف الوارث هي نفسها موجودة في التصنيف الموروث ، لتبسيط الأمر فلنفترض أن لدينا تصنيف class Person وبداخله دالة تقوم بالطباعة :-

  • يتوجب علينا أن نجعل الدالة في التصنيف الموروث open .
open class Person(){

      open fun getInfo(name:String){
        println("welcome $name")
    }
    fun printWelcome(){
        println("welcome")
    }

}

ولدي  التصنيف الوارث class Employee يرث جميع محتويات class Person وبما أنه يرثها فهذا يعني أنه سيمنعني من تكرار نفس مسمى الدالة ولكن لتجنب هذا الأمر نستخدم مفهوم override :-

class Employee():Person(){

    override fun getInfo(jobTitle:String){
        println(" your job title :$jobTitle ")
    }
}
  • نلاحظ أن الدالة الموجودة بداخل التصنيف class Employee هي نفسها الموجودة بداخل التصنيف الموروث class Person وكتبنا قبلها كلمة override وهذا يعني أنه عند إنشاء كائن من هذا التصنيف لن يستطيع الوصول إلى الدالة getInfo الموجودة في class Person .
  • نريد التوضيح بأننا لو أردنا الدالة أن تنفذ نفس الأوامر ولكن نريد الزيادة عليها بمعنى أن الدالة لا تكتفي فقط بالأوامر البرمجية التي تمت كتابتها في التصنيف الموروث وإنما نريد أن نضيف أوامر أخرى :
open class Employee():Person(){

     final override fun getInfo(jobTitle:String){
        super.getInfo("Ahmed")
        println(" your job title :$jobTitle ")
    }
}

في الدالة الرئيسية :-

إذا نلاحظ أنه يستطيع الوصول لأي دالة ماعدا تلك التي عملنا لها override  حينها لن يستطيع الوصول إلا للدالة الموجودة في التصنيف class Employee .                                                                                      


ثانياً:كلمة final :- 

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

مثال :-

open class Employee():Person(){

    final override fun getInfo(jobTitle:String){
        super.getInfo("Ahmed")
        println(" your job title :$jobTitle ")
    }
}

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