توضیحات
شی گرایی در برنامه نویسی به شما این امکان رو میده ویژگی ها و توابع یک کلاس رو به کلاس جدید منتقل کنید به این قابلیت وراثت یا ارث بری (inheritance) گفته میشه
قابلیت وراثت یا ارث بری کمک میکنه تا از دوباره نویسی توابع و پراپرتی های تکراری پرهیز کنید. این کار به سرعت نوشتن اپلیکیشن و درک بهتر کد ها کمک میکنه.
فرض کنید میخوایم برای Circle (دایره) و Rectangle (مستطیل) دوتا کلاس تعریف کنیم، این دو آبجکت پراپرتی و توابع مشترکی دارن که هر دو میتونن از یک کلاس مشترک به ارث ببرن.
برای این منظور میتونیم یک کلاس به اسم GeometricShape تعریف کنیم که دارای پراپرتی ها و توابع مشترک بین Circle و Rectangle است، و این دو کلاس پراپرتی و توابع GeometricShape رو به ارث ببرن.

به کلاسی که ویژگی های مشترک دایره و مستطیل رو داره کلاس پدر سوپر کلاس (superclass) و به کلاس های دایره و مستطیل که ازش ارث میبرن کلاس بچه یا ساب کلاس (subclass)میگیم.
نحوه ی ارث بردن از یک کلاس
برای ارث بردن از سوپر کلاس (superclass) باید سوپر کلاس با کلیدواژه ی open تعریف بشه.
هنگام تعریف subclass با استفاده از دو نقطه بعد از اسم subclass و کانستراکتور اولیه اش (در صورت تعریف آشکار کانستراکتور) اسم superclass رو می نویسیم.
هنگام ایجاد آبجکت از subclass ابتدا superclass آماده سازی میشه و سپس subclass.
اگه در subclass کانستراکتور اولیه داشته باشیم هنگام ارث بری باید یکی از کانسنراکتور های سوپر کلاس مقداردهی بشن.
استفاده از کلیدواژه ی super برای صدا زدن کانستراکتور های superclass
اگه در subclass کانستراکتور اولیه نداشته باشیم، نمیتونیم پارامتر های کانستراکتور superclass رو هنگام ارث بری مقداردهی کنیم؛ بنابراین با استفاده از کلیدواژه ی super بعد از کانستراکتور های ثانویه subclass کانستراکتور های superclass رو مقداردهی میکنیم.
نکته
در این حالت باید از کلیدواژه ی super بعد از تمام کانستراکتور های ثانویه استفاده بشه.
نکته
اگه کانستراکتور ثانویه در ساب کلاس (subclass) با this رجوع کنه به کانستراکتوری که از super استفاده کرده در این حالت نیاری به استفاده از کلیدواژه ی super نیست.
مثال
در زیر کلیدواژه ی this رجوع میکنه به کانستراکتور های خود کلاس و کلیدواژه ی super رجوع میکنه به کانستراکتور های superclass
باز نویسی (override) کردن توابع
میتونیم توابع superclass رو در subclass بازنویسی کنیم در اینصورت میگیم تابع رو override کردیم.
برای این کار تابع باید در superclass با کلیدواژه ی open تعریف شده باشه و در subclass از کلیدواژه ی override برای بازنویسی تابع استفاده کنیم.
استفاده از کلیدواژه ی super برای صدا زدن کد های تابع در superclass
هنگام override کردن تابع (متد) اگه بخوایم کد های superclass رو در subclass داشته باشیم با استفاده از کلیدواژه ی super، نقطه و اسم تابع کد ها رو صدا میزنیم.
مثال
بازنویسی (override) کردن پراپرتی ها
مانند توابع، پراپرتی ها باید در سوپر کلاس با کلیدواژه ی open تعریف بشن؛ سپس در subclass با کلیدواژه ی override میتونیم بازنویسیشون کنیم.
نکته:
هنگام override کردن یک پراپرتی (property) اگه پراپرتی با val تعریف شده بود میتونیم با var بازنویسیش کنیم اما برعکس ممکن نیست.
معرفی کلاس Any
کلاس Any در کاتلین مانند کلاس Object در جاواست، این کلاس دارای سه تابع (متد) hashcode، equals و toString است.
هر کلاسی که superclass نداشته باشه به طور پیشفرض از این کلاس ارث بری میکنه بنابراین میشه نتیجه گرفت کلاس Any سوپر کلاس تمام کلاس ها به طور مستقیم یا غیر مستقیم است.
مثال
مورد مطالعه (مثال ها)
یک کلاس تعریف میکنیم به اسم Shape که ویژگی های عمومی یک شکل رو به همراه داره سپس با کلاس GeometricShape این ویزگی ها رو به ارث می بریم و به علاوه ویژگی های جدید به GeometricShape اضافه میکنیم و در نهایت با دو کلاس Rectangle و Circle از کلاس GeometricShape ارث بری میکنیم و کلاس های اختصاصی دایره و مستطیل رو به وجود میاریم.

خلاصه
- از وراثت برای جلوگیری از دوباره نویسی کد های یک کلاس در کلاس دیگه استفاده میشه.
- در وراثت به کلاسی که ازش ارث برده میشه superclass و کلاسی که ارث می بره subclass گفته میشه.
- هنگامی که superclass کانستراکتور اولیه داشته باشه باید پارامتر های یکی از کانستراکتور هاش موقع ارث بری مقداردهی بشن.
- از کلیدواژه ی super برای صدا زدن کانستراکتور های superclass میتونیم استفاده کنیم.
- میتونیم توابع superclass رو در subclass بازنویسی کنیم.
- هنگام بازنویسی یک تابع میتونیم با استفاده از کلیدواژه ی super کد های تابع در superclass رو داشته باشیم.
- میتونیم پراپرتی ها در superclass رو در subclass بازنویسی کنیم.
- کلاس Any به طور پیشفرض superclass کلاسی است که از کلاسی ارث بری نکرده.
- کلاس Any سوپر کلاس مستقیم و غیر مستقیم تمام کلاس هاست.