در زبان برنامه‌نویسی Kotlin، می‌توان یک کلاس را طوری تعریف کرد که ویژگی‌ها (properties) و توابع (functions) خود را به کلاس دیگری منتقل کند. این مفهوم وراثت (Inheritance) نام دارد.

🔹 دسته‌بندی کلاس‌ها در وراثت

وقتی یک کلاس از کلاس دیگری ارث‌بری می‌کند، دو نوع کلاس داریم:

  1. کلاس والد (Superclass / Parent Class) 👉 کلاسی که ویژگی‌ها و توابع از آن به کلاس‌های دیگر منتقل می‌شود.
  2. کلاس فرزند (Subclass / Child Class) 👉 کلاسی که از یک کلاس والد ارث‌بری می‌کند.

💡 مثال ساده از وراثت در Kotlin

در این مثال، کلاس MyChildClass از کلاس MyParentClass ارث‌بری می‌کند:

// کلاس والد (Superclass)
open class MyParentClass {
  val x = 5
}

// کلاس فرزند (Subclass)
class MyChildClass: MyParentClass() {
  fun myFunction() {
    println(x) // مقدار x از کلاس والد به ارث برده شده است
  }
}

// استفاده از کلاس فرزند
fun main() {
  val myObj = MyChildClass()
  myObj.myFunction() // خروجی: 5
}

🔍 تحلیل کد بالا

کلمه کلیدی open
به‌صورت پیش‌فرض، کلاس‌ها در Kotlin نهایی (final) هستند، یعنی نمی‌توان از آن‌ها ارث‌بری کرد. برای اینکه یک کلاس والد بتواند ویژگی‌هایش را به کلاس‌های دیگر بدهد، باید قبل از تعریف آن از open استفاده کنیم:

open class MyParentClass {
  val x = 5
}

نحوه ارث‌بری در Kotlin
برای اینکه یک کلاس از کلاس دیگر ارث‌بری کند، باید بعد از نام کلاس فرزند، یک : بگذاریم و سپس نام کلاس والد را بنویسیم:

class MyChildClass: MyParentClass()

🎯 چرا و چه زمانی از وراثت استفاده کنیم؟

وراثت در برنامه‌نویسی یک ویژگی بسیار مهم است که کد را خواناتر و قابل استفاده مجدد (Reusable) می‌کند.

🛠 مزایای استفاده از وراثت

کاهش کدهای تکراری 🤩
به‌جای نوشتن چندباره ویژگی‌ها و توابع مشابه در چند کلاس، می‌توان آن‌ها را در یک کلاس والد تعریف کرد و در کلاس‌های دیگر از آن استفاده کرد.

سازماندهی بهتر کدها 🏗
اگر چند کلاس ویژگی‌های مشابه داشته باشند، می‌توان آن ویژگی‌ها را در کلاس والد قرار داد و از بهم‌ریختگی جلوگیری کرد.

ایجاد ارتباط منطقی بین کلاس‌ها 🔗
مثلاً اگر در برنامه‌ای چند نوع حیوان داشته باشیم، می‌توانیم یک کلاس والد Animal ایجاد کنیم و سپس کلاس‌های فرزند مانند Dog و Cat از آن ارث‌بری کنند.


🎯 چالش برای شما! 🔥

فرض کنید می‌خواهید یک کلاس Vehicle (وسیله نقلیه) بسازید که ویژگی speed (سرعت) را در خود داشته باشد. سپس کلاس‌های Car (ماشین) و Bike (موتور) را طوری تعریف کنید که این ویژگی را از کلاس والد ارث‌بری کنند. کد را بنویسید و تست کنید! 🚗🏍💨