در این بخش در ادامه پست فبلی به سراغ معرفی نوع دیگری از ارثبری می رویم به نام ارثبری چندسطحی (Multilevel Inheritance) :
در مثال زیر یک کلاس از کلاسی ارثبری میکند که خودش از کلاس دیگری ارثبری کرده است.
public class Animal
{
public void Eat() => Console.WriteLine("Eating...");
}
public class Mammal : Animal
{ // سطح اول
public void Walk() => Console.WriteLine("Walking...");
}
public class Dog : Mammal
{ // سطح دوم
public void Bark() => Console.WriteLine("Barking...");
}
// روش استفاده
var dog = new Dog();
dog.Eat(); // از Animal
dog.Walk(); // از Mammal
dog.Bark();
در مثال بالا ، دلیل اینکه این کد بهعنوان یک نمونه از ارثبری (Inheritance) و بهویژه ارثبری چندسطحی (Multilevel Inheritance) در نظر گرفته میشود، به ساختار سلسلهمراتبی کلاسها و نحوه دسترسی به متدها برمیگردد. بیایید این موضوع را مرحله به مرحله بررسی کنیم:
1 - تعریف ارثبری
ارثبری در برنامهنویسی شیءگرا به این معناست که یک کلاس (کلاس فرزند) میتواند ویژگیها و رفتارهای یک کلاس دیگر (کلاس والد) را به ارث ببرد. در اینجا، کلاس Dog بهطور مستقیم از کلاس Mammal ارثبری میکند و کلاس Mammal نیز بهطور مستقیم از کلاس Animal ارثبری کرده است . این زنجیره ارثبری، یک ارثبری چندسطحی را تشکیل میدهد:
2 - چرا این ارثبری است، حتی اگر متد همنام استفاده نشده باشد؟
برای جلوگیری از ایجاد سوء تفاهم در معنی ارثبری باید بگویم که ارثبری به معنای استفاده از متدهای همنام یا بازنویسی (Override) نیست. ارثبری صرفاً به این معناست که کلاس فرزند به تمام اعضای عمومی (public) و محافظتشده (protected) کلاس والد دسترسی دارد، مگر اینکه آنها را بازنویسی یا مخفی کند. در این مثال:
وقتی یک شیء از کلاس Dog میسازید ، این شیء به تمام متدهای عمومی کلاسهای والد خود (Eat از Animal و Walk از Mammal) به علاوه متد خودش (Bark) دسترسی دارد. این دسترسی به متدها از طریق ارثبری ممکن شده است، حتی اگر هیچ متدی بازنویسی یا همنام نشده باشد.
3 - ارثبری چندسطحی در عمل
در این کد، وقتی شما دستورات زیر را اجرا میکنید:
var dog = new Dog();
dog.Eat(); // خروجی: Eating...
dog.Walk(); // خروجی: Walking...
dog.Bark(); // خروجی: Barking...
این نشان میدهد که Dog بهطور غیرمستقیم از Animal (از طریق Mammal) ارثبری کرده است. این زنجیره سلسلهمراتبی دقیقاً همان چیزی است که ارثبری چندسطحی را تعریف میکند.
4 - جمعبندی
ارثبری به معنای انتقال قابلیتها از کلاس والد به کلاس فرزند است، نه لزوماً استفاده از متدهای همنام یا بازنویسی آنها. در این مثال، Dog بهطور کامل از Mammal و بهطور غیرمستقیم از Animal ارثبری میکند و این ساختار چندسطحی باعث میشود که بتوانید به متدهای هر سه سطح دسترسی داشته باشید. به همین دلیل، این کد بهعنوان یک نمونه از ارثبری چندسطحی در نظر گرفته میشود.