تسلط بر مبانی سی شارپ: وراثت
Summarize this content to 400 words in Persian Lang توضیحات متا:ارث یک مفهوم اساسی در برنامه نویسی شی گرا (OOP) است که به ما اجازه می دهد یک کلاس جدید ایجاد کنیم که بر اساس یک کلاس موجود ساخته می شود. با به اشتراک گذاشتن عملکردها و ویژگی های مشترک در کلاس های مختلف، کاهش افزونگی و بهبود قابلیت نگهداری، به سازماندهی موثر کد کمک می کند.
در این مقاله، ارث را با یک مثال عملی با تمرکز بر بررسی می کنیم وسایل نقلیه، برای نشان دادن اینکه چگونه و چرا وراثت در ساخت برنامه های کاربردی در دنیای واقعی مفید است. ما همچنین به طور عمیق به استفاده از محافظت شده است اصلاح کننده دسترسی، یک جنبه کلیدی از وراثت.
سناریوی واقعی: وسایل نقلیه
تصور کنید در حال طراحی نرم افزاری برای سیستم مدیریت خودرو هستید. این شرکت انواع مختلفی از وسایل نقلیه مانند ماشین ها، دوچرخه، و کامیون ها. در حالی که هر نوع وسیله نقلیه ویژگی های منحصر به فرد خود را دارد، همه آنها دارای برخی ویژگی ها و رفتارهای مشترک هستند:
همه وسایل نقلیه دارای یک نام، یک سرعت، و راهی برای شروع کنید و توقف.
ماشین ها ممکن است دارای تهویه مطبوع و ظرفیت های مختلف صندلی باشد.
دوچرخه زنگ دارند اما از سوخت استفاده نمی کنند.
کامیون ها می تواند بارهای سنگین را حمل کند و ظرفیت بارگذاری متفاوتی داشته باشد.
به جای تکرار ویژگی ها و رفتارهای مشترک در هر کلاس، می توانیم از وراثت استفاده کنیم. به این ترتیب، ما می توانیم عملکرد مشترک را در a تعریف کنیم کلاس پایه و از آن به ارث بری برای اضافه کردن ویژگی های خاص در کلاس های مشتق شده.
مرحله 1: ایجاد کلاس پایه
ما با ایجاد یک شروع می کنیم کلاس پایه نام برد Vehicle. این کلاس حاوی تمام ویژگی ها و روش های مشترک برای هر نوع وسیله نقلیه است.
public class Vehicle
{
public string Name { get; set; }
public int Speed { get; set; }
protected int FuelLevel { get; set; } // Protected: Only accessible by Vehicle and its derived classes
public void Start()
{
Console.WriteLine($”{Name} is starting.”);
}
public void Stop()
{
Console.WriteLine($”{Name} is stopping.”);
}
public void Accelerate(int amount)
{
Speed += amount;
Console.WriteLine($”{Name} is accelerating to {Speed} km/h.”);
}
public void Refuel(int amount)
{
FuelLevel += amount;
Console.WriteLine($”{Name} has been refueled by {amount} liters. Current fuel level: {FuelLevel} liters.”);
}
}
در اینجا تعریف کردیم:
Name و Speed به عنوان public خواص
FuelLevel به عنوان یک protected ویژگی، به این معنی که می توان به آن دسترسی پیدا کرد Vehicle کلاس و هر کلاس مشتق شده اما نه از کلاس های خارجی.
روش هایی مانند Start()، Stop()، Accelerate()، و Refuel() نشان دهنده اقدامات مشترکی است که یک وسیله نقلیه می تواند انجام دهد.
مرحله 2: ایجاد کلاس های مشتق شده
اکنون، ما انواع خاصی از وسایل نقلیه را ایجاد می کنیم که شما ارث می برید از Vehicle کلاس پایه این کلاس های مشتق شده ویژگی های خاصی را اضافه می کنند که برای هر نوع خودرو منحصر به فرد است.
کلاس ماشین ( ارث می برد از Vehicle)
public class Car : Vehicle
{
public bool HasAirConditioning { get; set; }
public void TurnOnAirConditioning()
{
if (HasAirConditioning)
{
Console.WriteLine($”{Name}’s air conditioning is now on.”);
}
else
{
Console.WriteLine($”{Name} doesn’t have air conditioning.”);
}
}
public void Drive(int distance)
{
if (FuelLevel >= distance / 10)
{
FuelLevel -= distance / 10; // Use protected FuelLevel
Console.WriteLine($”{Name} drove {distance} km. Remaining fuel: {FuelLevel} liters.”);
}
else
{
Console.WriteLine($”Not enough fuel for {Name} to drive {distance} km.”);
}
}
}
کلاس دوچرخه ( ارث می برد از Vehicle)
public class Bicycle : Vehicle
{
public bool HasBell { get; set; }
public void RingBell()
{
if (HasBell)
{
Console.WriteLine($”{Name} is ringing the bell!”);
}
else
{
Console.WriteLine($”{Name} doesn’t have a bell.”);
}
}
public void Pedal(int distance)
{
Speed += 5;
Console.WriteLine($”{Name} is pedaling {distance} km at speed {Speed} km/h.”);
}
}
کلاس کامیون ( ارث می برد از Vehicle)
public class Truck : Vehicle
{
public int LoadCapacity { get; set; } // Load capacity in kg
public void LoadCargo(int weight)
{
if (weight <= LoadCapacity)
{
Console.WriteLine($”{Name} is now loaded with {weight} kg.”);
}
else
{
Console.WriteLine($”{Name} cannot carry more than {LoadCapacity} kg.”);
}
}
public void DriveWithCargo(int distance)
{
if (FuelLevel >= distance / 5)
{
FuelLevel -= distance / 5; // Use protected FuelLevel
Console.WriteLine($”{Name} drove {distance} km with cargo. Remaining fuel: {FuelLevel} liters.”);
}
else
{
Console.WriteLine($”Not enough fuel for {Name} to drive {distance} km with cargo.”);
}
}
}
مرحله 3: استفاده از کلاس ها
اکنون که کلاس های خود را تعریف کرده ایم، بیایید ببینیم که وراثت در عمل چگونه کار می کند.
public static void Main(string[] args)
{
// Create a Car instance
Car car = new Car() { Name = “Sedan”, Speed = 0, HasAirConditioning = true };
car.Refuel(50); // Refuel using a public method from Vehicle
car.Start(); // Use Start method from Vehicle
car.Drive(200); // Use Drive method from Car, which utilizes protected FuelLevel
car.TurnOnAirConditioning(); // Use Car-specific method
car.Stop(); // Use Stop method from Vehicle
Console.WriteLine();
// Create a Bicycle instance
Bicycle bicycle = new Bicycle() { Name = “Mountain Bike”, Speed = 0, HasBell = true };
bicycle.Start(); // Use Start method from Vehicle
bicycle.Pedal(15); // Use Pedal method from Bicycle
bicycle.RingBell(); // Use Bicycle-specific method
bicycle.Stop(); // Use Stop method from Vehicle
Console.WriteLine();
// Create a Truck instance
Truck truck = new Truck() { Name = “Heavy Loader”, Speed = 0, LoadCapacity = 10000 };
truck.Refuel(100); // Refuel using a public method from Vehicle
truck.Start(); // Use Start method from Vehicle
truck.LoadCargo(8000); // Use Truck-specific method
truck.DriveWithCargo(150); // Use Truck-specific method to drive with cargo
truck.Stop(); // Use Stop method from Vehicle
}
درک کردن protected Access Modifier در وراثت
این protected اصلاح کننده دسترسی در وراثت بسیار مهم است. بین آن می نشیند public و private از نظر دسترسی در اینجا یک تفکیک دقیق است:
public: عضو از هر کجا قابل دسترسی است.
private: عضو فقط در خود کلاس قابل دسترسی است.
protected: عضو در کلاسی که در آن تعریف شده و هر یک از کلاس های مشتق شده آن قابل دسترسی است.
فکر کن protected به عنوان راهی برای به اشتراک گذاشتن جزئیات خاص بین یک کلاس و “فرزندان” آن، اما برای پنهان نگه داشتن این جزئیات از بقیه جهان.
زمان استفاده protected
protected زمانی مفید است که یک کلاس پایه دارید که اعضای آن باید با کلاس های مشتق شده به اشتراک گذاشته شوند، اما می خواهید از دسترسی مستقیم کلاس های خارج جلوگیری کنید. به عنوان مثال، منطق داخلی، داده ها یا رفتارهایی که برای کلاس های مشتق شده رایج هستند اما نباید به صورت عمومی در معرض دید قرار گیرند.
مثال: کارمندان
یک را در نظر بگیرید کارمند کلاس پایه و کلاس های مشتق شده خاص مانند مدیر و کارآموز. همه کارکنان دارای یک حقوق و دستمزد که به صورت داخلی مدیریت می شود، اما هر نوع کارمند ممکن است محاسبات متفاوتی برای پاداش یا افزایش حقوق داشته باشد.
کلاس پایه (Employee):
public class Employee
{
public string Name { get; set; }
protected decimal BaseSalary { get; set; } // Protected salary
public Employee(string name, decimal baseSalary)
{
Name = name;
BaseSalary = baseSalary;
}
public void ShowSalary()
{
Console.WriteLine($”{Name}’s base salary is {BaseSalary}.”);
}
}
کلاس مشتق شده (Manager):
public class Manager : Employee
{
public Manager(string name, decimal baseSalary) : base(name, baseSalary) { }
public void ApplyBonus()
{
// Using the protected member BaseSalary
BaseSalary += 2000;
Console.WriteLine($”{Name} received a bonus. New salary: {BaseSalary}.”);
}
}
استفاده:
public static void Main(string[] args)
{
Manager manager = new Manager(“Alice”, 50000);
manager.ShowSalary(); // Public method, can be accessed from anywhere
manager.ApplyBonus(); // Apply bonus
manager.ShowSalary(); // Show updated salary
}
مزایای protected
دسترسی کنترل شده برای کلاس های مشتق شده: protected به کلاس های مشتق شده اجازه می دهد تا به ویژگی ها و متدهای حیاتی بدون افشای عمومی دسترسی داشته باشند. این زمانی مفید است که میخواهید کلاسهای مشتق شده رفتارهای خاصی را گسترش دهند یا تغییر دهند.
کپسولاسیون: اعضا را از دخالت خارجی در امان نگه می دارد. به عنوان مثال، FuelLevel فقط باید به شیوه ای کنترل شده، یا توسط کلاس های مشتق شده یا با روش های عمومی کلاس پایه، اصلاح شود.
استفاده مجدد از کد و انعطاف پذیری: protected انعطاف پذیری در کلاس های مشتق شده را برای استفاده یا گسترش رفتارهای تعریف شده در کلاس پایه، پشتیبانی از استفاده مجدد و کاهش افزونگی امکان پذیر می کند.
تکالیف
سطح آسان
یک کلاس مشتق شده جدید با نام ایجاد کنید موتور سیکلت که از آن به ارث می برد Vehicle. یک ملک اضافه کنید HasSideCar و یک روش ToggleSideCar().
برای ایجاد یک نمونه کد بنویسید موتور سیکلتخصوصیات آن را تنظیم کرده و متدهای آن را فراخوانی کنید.
سطح متوسط
را اصلاح کنید دوچرخه کلاس برای اضافه کردن یک ویژگی جدید به نام GearCount و روشی به نام ChangeGear(int newGear) برای تنظیم دنده دوچرخه
ایجاد یک نمونه از دوچرخه، تعداد دنده ها را تنظیم کنید و کدی بنویسید تا هنگام رکاب زدن دنده ها را عوض کنید.
سطح دشوار
ایجاد یک اتوبوس کلاسی که از آن ارث می برد Vehicle با یک ملک PassengerCapacity و یک روش PickUpPassengers(int passengers).
یک ویژگی برای ردیابی تعداد مسافران در هواپیما پیاده کنید و منطق را برای جلوگیری از بیش از ظرفیت مسافر در نظر بگیرید.
برای ایجاد یک کد بنویسید اتوبوس به عنوان مثال، سوار کردن مسافران، و شبیه سازی رانندگی در یک مسافت مشخص در حالی که مدیریت سطح سوخت.
نتیجه گیری
با درک و به کارگیری وراثت، میتوانیم برنامههایی با ساختار، مقیاسپذیر و قابل نگهداری ایجاد کنیم. نکته کلیدی این است که تعادل مناسب بین عملکرد به اشتراک گذاری از طریق کلاس پایه و رفتار سفارشی سازی در کلاس های مشتق شده را پیدا کنید، و در عین حال از کپسوله سازی از طریق اصلاح کننده های دسترسی مانند اطمینان حاصل کنید. محافظت شده است.
توضیحات متا:ارث یک مفهوم اساسی در برنامه نویسی شی گرا (OOP) است که به ما اجازه می دهد یک کلاس جدید ایجاد کنیم که بر اساس یک کلاس موجود ساخته می شود. با به اشتراک گذاشتن عملکردها و ویژگی های مشترک در کلاس های مختلف، کاهش افزونگی و بهبود قابلیت نگهداری، به سازماندهی موثر کد کمک می کند.
در این مقاله، ارث را با یک مثال عملی با تمرکز بر بررسی می کنیم وسایل نقلیه، برای نشان دادن اینکه چگونه و چرا وراثت در ساخت برنامه های کاربردی در دنیای واقعی مفید است. ما همچنین به طور عمیق به استفاده از محافظت شده است اصلاح کننده دسترسی، یک جنبه کلیدی از وراثت.
سناریوی واقعی: وسایل نقلیه
تصور کنید در حال طراحی نرم افزاری برای سیستم مدیریت خودرو هستید. این شرکت انواع مختلفی از وسایل نقلیه مانند ماشین ها، دوچرخه، و کامیون ها. در حالی که هر نوع وسیله نقلیه ویژگی های منحصر به فرد خود را دارد، همه آنها دارای برخی ویژگی ها و رفتارهای مشترک هستند:
- همه وسایل نقلیه دارای یک نام، یک سرعت، و راهی برای شروع کنید و توقف.
- ماشین ها ممکن است دارای تهویه مطبوع و ظرفیت های مختلف صندلی باشد.
- دوچرخه زنگ دارند اما از سوخت استفاده نمی کنند.
- کامیون ها می تواند بارهای سنگین را حمل کند و ظرفیت بارگذاری متفاوتی داشته باشد.
به جای تکرار ویژگی ها و رفتارهای مشترک در هر کلاس، می توانیم از وراثت استفاده کنیم. به این ترتیب، ما می توانیم عملکرد مشترک را در a تعریف کنیم کلاس پایه و از آن به ارث بری برای اضافه کردن ویژگی های خاص در کلاس های مشتق شده.
مرحله 1: ایجاد کلاس پایه
ما با ایجاد یک شروع می کنیم کلاس پایه نام برد Vehicle
. این کلاس حاوی تمام ویژگی ها و روش های مشترک برای هر نوع وسیله نقلیه است.
public class Vehicle
{
public string Name { get; set; }
public int Speed { get; set; }
protected int FuelLevel { get; set; } // Protected: Only accessible by Vehicle and its derived classes
public void Start()
{
Console.WriteLine($"{Name} is starting.");
}
public void Stop()
{
Console.WriteLine($"{Name} is stopping.");
}
public void Accelerate(int amount)
{
Speed += amount;
Console.WriteLine($"{Name} is accelerating to {Speed} km/h.");
}
public void Refuel(int amount)
{
FuelLevel += amount;
Console.WriteLine($"{Name} has been refueled by {amount} liters. Current fuel level: {FuelLevel} liters.");
}
}
در اینجا تعریف کردیم:
-
Name
وSpeed
به عنوانpublic
خواص -
FuelLevel
به عنوان یکprotected
ویژگی، به این معنی که می توان به آن دسترسی پیدا کردVehicle
کلاس و هر کلاس مشتق شده اما نه از کلاس های خارجی. - روش هایی مانند
Start()
،Stop()
،Accelerate()
، وRefuel()
نشان دهنده اقدامات مشترکی است که یک وسیله نقلیه می تواند انجام دهد.
مرحله 2: ایجاد کلاس های مشتق شده
اکنون، ما انواع خاصی از وسایل نقلیه را ایجاد می کنیم که شما ارث می برید از Vehicle
کلاس پایه این کلاس های مشتق شده ویژگی های خاصی را اضافه می کنند که برای هر نوع خودرو منحصر به فرد است.
کلاس ماشین ( ارث می برد از Vehicle
)
public class Car : Vehicle
{
public bool HasAirConditioning { get; set; }
public void TurnOnAirConditioning()
{
if (HasAirConditioning)
{
Console.WriteLine($"{Name}'s air conditioning is now on.");
}
else
{
Console.WriteLine($"{Name} doesn't have air conditioning.");
}
}
public void Drive(int distance)
{
if (FuelLevel >= distance / 10)
{
FuelLevel -= distance / 10; // Use protected FuelLevel
Console.WriteLine($"{Name} drove {distance} km. Remaining fuel: {FuelLevel} liters.");
}
else
{
Console.WriteLine($"Not enough fuel for {Name} to drive {distance} km.");
}
}
}
کلاس دوچرخه ( ارث می برد از Vehicle
)
public class Bicycle : Vehicle
{
public bool HasBell { get; set; }
public void RingBell()
{
if (HasBell)
{
Console.WriteLine($"{Name} is ringing the bell!");
}
else
{
Console.WriteLine($"{Name} doesn't have a bell.");
}
}
public void Pedal(int distance)
{
Speed += 5;
Console.WriteLine($"{Name} is pedaling {distance} km at speed {Speed} km/h.");
}
}
کلاس کامیون ( ارث می برد از Vehicle
)
public class Truck : Vehicle
{
public int LoadCapacity { get; set; } // Load capacity in kg
public void LoadCargo(int weight)
{
if (weight <= LoadCapacity)
{
Console.WriteLine($"{Name} is now loaded with {weight} kg.");
}
else
{
Console.WriteLine($"{Name} cannot carry more than {LoadCapacity} kg.");
}
}
public void DriveWithCargo(int distance)
{
if (FuelLevel >= distance / 5)
{
FuelLevel -= distance / 5; // Use protected FuelLevel
Console.WriteLine($"{Name} drove {distance} km with cargo. Remaining fuel: {FuelLevel} liters.");
}
else
{
Console.WriteLine($"Not enough fuel for {Name} to drive {distance} km with cargo.");
}
}
}
مرحله 3: استفاده از کلاس ها
اکنون که کلاس های خود را تعریف کرده ایم، بیایید ببینیم که وراثت در عمل چگونه کار می کند.
public static void Main(string[] args)
{
// Create a Car instance
Car car = new Car() { Name = "Sedan", Speed = 0, HasAirConditioning = true };
car.Refuel(50); // Refuel using a public method from Vehicle
car.Start(); // Use Start method from Vehicle
car.Drive(200); // Use Drive method from Car, which utilizes protected FuelLevel
car.TurnOnAirConditioning(); // Use Car-specific method
car.Stop(); // Use Stop method from Vehicle
Console.WriteLine();
// Create a Bicycle instance
Bicycle bicycle = new Bicycle() { Name = "Mountain Bike", Speed = 0, HasBell = true };
bicycle.Start(); // Use Start method from Vehicle
bicycle.Pedal(15); // Use Pedal method from Bicycle
bicycle.RingBell(); // Use Bicycle-specific method
bicycle.Stop(); // Use Stop method from Vehicle
Console.WriteLine();
// Create a Truck instance
Truck truck = new Truck() { Name = "Heavy Loader", Speed = 0, LoadCapacity = 10000 };
truck.Refuel(100); // Refuel using a public method from Vehicle
truck.Start(); // Use Start method from Vehicle
truck.LoadCargo(8000); // Use Truck-specific method
truck.DriveWithCargo(150); // Use Truck-specific method to drive with cargo
truck.Stop(); // Use Stop method from Vehicle
}
درک کردن protected
Access Modifier در وراثت
این protected
اصلاح کننده دسترسی در وراثت بسیار مهم است. بین آن می نشیند public
و private
از نظر دسترسی در اینجا یک تفکیک دقیق است:
-
public
: عضو از هر کجا قابل دسترسی است. -
private
: عضو فقط در خود کلاس قابل دسترسی است. -
protected
: عضو در کلاسی که در آن تعریف شده و هر یک از کلاس های مشتق شده آن قابل دسترسی است.
فکر کن protected
به عنوان راهی برای به اشتراک گذاشتن جزئیات خاص بین یک کلاس و “فرزندان” آن، اما برای پنهان نگه داشتن این جزئیات از بقیه جهان.
زمان استفاده protected
protected
زمانی مفید است که یک کلاس پایه دارید که اعضای آن باید با کلاس های مشتق شده به اشتراک گذاشته شوند، اما می خواهید از دسترسی مستقیم کلاس های خارج جلوگیری کنید. به عنوان مثال، منطق داخلی، داده ها یا رفتارهایی که برای کلاس های مشتق شده رایج هستند اما نباید به صورت عمومی در معرض دید قرار گیرند.
مثال: کارمندان
یک را در نظر بگیرید کارمند کلاس پایه و کلاس های مشتق شده خاص مانند مدیر و کارآموز. همه کارکنان دارای یک حقوق و دستمزد که به صورت داخلی مدیریت می شود، اما هر نوع کارمند ممکن است محاسبات متفاوتی برای پاداش یا افزایش حقوق داشته باشد.
-
کلاس پایه (
Employee
):
public class Employee
{
public string Name { get; set; }
protected decimal BaseSalary { get; set; } // Protected salary
public Employee(string name, decimal baseSalary)
{
Name = name;
BaseSalary = baseSalary;
}
public void ShowSalary()
{
Console.WriteLine($"{Name}'s base salary is {BaseSalary}.");
}
}
-
کلاس مشتق شده (
Manager
):
public class Manager : Employee
{
public Manager(string name, decimal baseSalary) : base(name, baseSalary) { }
public void ApplyBonus()
{
// Using the protected member BaseSalary
BaseSalary += 2000;
Console.WriteLine($"{Name} received a bonus. New salary: {BaseSalary}.");
}
}
- استفاده:
public static void Main(string[] args)
{
Manager manager = new Manager("Alice", 50000);
manager.ShowSalary(); // Public method, can be accessed from anywhere
manager.ApplyBonus(); // Apply bonus
manager.ShowSalary(); // Show updated salary
}
مزایای protected
دسترسی کنترل شده برای کلاس های مشتق شده:
protected
به کلاس های مشتق شده اجازه می دهد تا به ویژگی ها و متدهای حیاتی بدون افشای عمومی دسترسی داشته باشند. این زمانی مفید است که میخواهید کلاسهای مشتق شده رفتارهای خاصی را گسترش دهند یا تغییر دهند.کپسولاسیون: اعضا را از دخالت خارجی در امان نگه می دارد. به عنوان مثال،
FuelLevel
فقط باید به شیوه ای کنترل شده، یا توسط کلاس های مشتق شده یا با روش های عمومی کلاس پایه، اصلاح شود.استفاده مجدد از کد و انعطاف پذیری:
protected
انعطاف پذیری در کلاس های مشتق شده را برای استفاده یا گسترش رفتارهای تعریف شده در کلاس پایه، پشتیبانی از استفاده مجدد و کاهش افزونگی امکان پذیر می کند.
تکالیف
سطح آسان
- یک کلاس مشتق شده جدید با نام ایجاد کنید موتور سیکلت که از آن به ارث می برد
Vehicle
. یک ملک اضافه کنیدHasSideCar
و یک روشToggleSideCar()
. - برای ایجاد یک نمونه کد بنویسید موتور سیکلتخصوصیات آن را تنظیم کرده و متدهای آن را فراخوانی کنید.
سطح متوسط
- را اصلاح کنید دوچرخه کلاس برای اضافه کردن یک ویژگی جدید به نام
GearCount
و روشی به نامChangeGear(int newGear)
برای تنظیم دنده دوچرخه - ایجاد یک نمونه از دوچرخه، تعداد دنده ها را تنظیم کنید و کدی بنویسید تا هنگام رکاب زدن دنده ها را عوض کنید.
سطح دشوار
- ایجاد یک اتوبوس کلاسی که از آن ارث می برد
Vehicle
با یک ملکPassengerCapacity
و یک روشPickUpPassengers(int passengers)
. - یک ویژگی برای ردیابی تعداد مسافران در هواپیما پیاده کنید و منطق را برای جلوگیری از بیش از ظرفیت مسافر در نظر بگیرید.
- برای ایجاد یک کد بنویسید اتوبوس به عنوان مثال، سوار کردن مسافران، و شبیه سازی رانندگی در یک مسافت مشخص در حالی که مدیریت سطح سوخت.
نتیجه گیری
با درک و به کارگیری وراثت، میتوانیم برنامههایی با ساختار، مقیاسپذیر و قابل نگهداری ایجاد کنیم. نکته کلیدی این است که تعادل مناسب بین عملکرد به اشتراک گذاری از طریق کلاس پایه و رفتار سفارشی سازی در کلاس های مشتق شده را پیدا کنید، و در عین حال از کپسوله سازی از طریق اصلاح کننده های دسترسی مانند اطمینان حاصل کنید. محافظت شده است.