Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

OOP in Java Second section | شی گرایی در جاوا قسمت دوم

📖توضیحات درس

🎥 این ویدیو قسمت هجدهم از بوت‌کمپ رایگان جاواست. 🧩 آموزش شی‌گرایی در جاوا – قسمت دوم 📝 در این قسمت به ادامه‌ی مسیر یادگیری شی‌گرایی در جاوا می‌پردازیم. مفاهیم پیشرفته‌تری مثل ارث‌بری (Inheritance)، پکیج‌ها (Packages)، و سطوح دسترسی (Access Modifiers) رو بررسی می‌کنیم. 🔑 همچنین با کلمات کلیدی مهمی مثل super، final و static آشنا می‌شیم و یاد می‌گیریم چطور رفتار کلاس‌ها و متدها رو با override تغییر بدیم. ✅ در پایان جلسه، با حل دو تمرین واقعی، آموخته‌هامون رو به‌صورت عملی پیاده‌سازی می‌کنیم تا مباحث به‌خوبی در ذهن تثبیت بشن. 🚀 اگر قسمت قبلی مقدمه‌ای برای شی‌گرایی بود، این قسمت گام بلندی به‌سمت تسلط بیشتر روی اصول طراحی شی‌گراست. 👥 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه راهنماییت می‌کنیم 🎓 بوت‌کمپ رایگان جاوا – آموزش تمرین‌محور برای یادگیری عمیق و ورود به بازار کار.
01:35:49🎯رایگان

📄جزوه

مفاهیم کلیدی

  • Inheritance (ارث‌بری)
    مکانیزمی که اجازه می‌دهد یک کلاس (Subclass) ویژگی‌ها و متدهای کلاس دیگری (Superclass) را به ارث ببرد. این کار از تکرار کدهای مشترک جلوگیری می‌کند.
  • Package (پکیج)
    ساختاری شبیه به پوشه‌بندی در سیستم‌عامل که برای دسته‌بندی کلاس‌های مرتبط، جلوگیری از تداخل نام‌ها و مدیریت بهتر پروژه استفاده می‌شود.
  • Access Modifiers (اصلاح‌گرهای دسترسی)
    کلماتی کلیدی که سطح دسترسی به کلاس‌ها، متدها و متغیرها را تعیین می‌کنند (شامل public ،private ،protected و حالت default).
  • Method Overriding (بازنویسی متد)
    زمانی که یک کلاس فرزند، پیاده‌سازی متدی که از پدر به ارث برده است را تغییر می‌دهد تا رفتار خاص خود را داشته باشد.
  • super Keyword
    کلمه‌ای کلیدی که برای ارجاع به اعضای کلاس پدر (مانند سازنده یا متدها) از داخل کلاس فرزند استفاده می‌شود.
  • final Keyword
    این کلمه کلیدی بسته به مکان استفاده، معنای "تغییرناپذیر" می‌دهد؛ برای متغیر (ثابت کردن مقدار)، برای متد (جلوگیری از اورراید) و برای کلاس (جلوگیری از ارث‌بری).
  • static Keyword
    به معنای تعلق یک عضو به خودِ کلاس است، نه به نمونه‌های ساخته شده از آن. اعضای استاتیک بدون نیاز به ساخت شیء قابل دسترسی هستند.

نکات مهم مصاحبه‌ای

  • آزمون Is-a در ارث‌بری چیست؟
    برای بررسی درستی رابطه ارث‌بری از این آزمون استفاده می‌شود. اگر بتوان گفت "دانشجو یک فرد است" (Student is a Person)، رابطه صحیح است؛ اما "میز یک دانشجو است" غلط است و نباید ارث‌بری صورت گیرد.

  • تفاوت سطوح دسترسی در جاوا چیست؟

    • public: دسترسی از همه جا.
    • private: فقط داخل همان کلاس.
    • protected: داخل همان پکیج و کلاس‌های فرزند (حتی در پکیج‌های دیگر).
    • default (بدون مودفایر): فقط داخل همان پکیج.
  • قوانین اصلی Method Overriding چیست؟
    نام متد و پارامترها باید دقیقاً مشابه پدر باشد. سطح دسترسی در فرزند نمی‌تواند محدودتر از پدر باشد (مثلاً نمی‌توان متد public پدر را در فرزند private کرد).

  • تفاوت this و super چیست؟
    this به اعضای همان کلاس فعلی اشاره دارد، در حالی که super به اعضای کلاس پدر اشاره می‌کند.

  • کاربرد final در کلاس و متد چیست؟
    وقتی کلاسی final شود، هیچ کلاس دیگری نمی‌تواند از آن ارث‌بری کند (مانند کلاس Scanner). وقتی متدی final شود، فرزندان نمی‌توانند آن را اورراید کنند.

  • چرا از متغیر static استفاده می‌کنیم؟
    زمانی که بخواهیم یک مقدار بین تمامی اشیاء ساخته شده از یک کلاس مشترک باشد یا بخواهیم متدی کمکی (Utility) بنویسیم که نیازی به ایجاد شیء نداشته باشد.

مثال یا سناریوی کاربردی

سناریو: مدیریت اعضای دانشگاه

۱. ایجاد کلاس والد: یک کلاس به نام Person تعریف می‌کنیم که ویژگی‌های مشترک مانند firstName ،lastName و age را دارد. ۲. استفاده از Inheritance: کلاس‌های Student و Professor را ایجاد کرده و آن‌ها را از Person اکستند (extends) می‌کنیم. حالا این دو کلاس خودبه‌خود ویژگی‌های نام و سن را دارند. ۳. استفاده از super: در سازنده (Constructor) کلاس Student ، با استفاده از super(firstName, lastName, ...) مقادیر را به سازنده کلاس پدر می‌فرستیم تا مقداردهی اولیه انجام شود. ۴. اجرای Overriding: متد printInfo() در کلاس پدر یک متن عمومی چاپ می‌کند. در کلاس Student این متد را اورراید می‌کنیم تا علاوه بر مشخصات فردی، "شماره دانشجویی" را هم چاپ کند.

// نمونه کد ساده
public class Person {
    protected String name;
    public void sayHello() { System.out.println("Hello from Person"); }
}

public class Student extends Person {
    @Override
    public void sayHello() { System.out.println("Hello from Student"); }
}

بیشتر بدانید

  • تذکر در IntelliJ: اگر متدی را اورراید کنید، یک علامت فلش کوچک در کنار شماره خط ظاهر می‌شود که با کلیک روی آن می‌توانید به متد والد بروید.

  • استفاده از @Override: همیشه از این انوتیشن استفاده کنید؛ چون اگر نام متد را اشتباه بنویسید، کامپایلر به شما خطا می‌دهد و از بروز باگ‌های منطقی جلوگیری می‌کند.

  • نکته در مورد import: وقتی از کلاس‌هایی در پکیج‌های دیگر استفاده می‌کنید، IDE به طور خودکار دستور import را اضافه می‌کند. کلاس‌های موجود در یک پکیج نیازی به ایمپورت یکدیگر ندارند.

  • نکته طراحی: اگر قصد دارید کلاسی بسازید که فقط متدهای محاسباتی و کمکی دارد، متدها را static تعریف کنید تا کاربر مجبور به ساخت شیء اضافی در حافظه نشود.