وراثت

آموزش وراثت در جاوا (به زبان کاملا ساده)

folderشی گرایی
comments1 دیدگاه
اساطیر زبان

در این آموزش شما با کمک مثال ، وراثت در جاوا را یاد خواهید گرفت.

وراثت یکی از ویژگیهای اصلی OOP (برنامه نویسی شی گرا) است که به ما امکان می دهد کلاس جدیدی را از یک کلاس موجود تعریف کنیم. مثلا،

 


جاوا

توی این پک فوق العاده، جاوا رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با جاوا اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

  1. class Animal
  2. {
  3. // eat() method
  4. // sleep() method
  5. }
  6. class Dog extends Animal
  7. {
  8. // bark() method
  9. }

در جاوا ، ما از کلمه کلیدی extends برای ارث بردن از یک کلاس استفاده می کنیم. در اینجا ، کلاس Dog از کلاس Animal ارث بری کرده است.

Animal سوپر کلاس (کلاس والد یا کلاس پایه) و Dog یک زیر کلاس (کلاس فرزند یا کلاس مشتق) است. زیر کلاس ویژگی ها و متد ها را از سوپر کلاس به ارث می برد.

C:\Users\Mr\Desktop\java-inheritance-introduction.png

توجه به این نکته حائز اهمیت است که فقط آن دسته از اعضایی که قابل مشاهده (در دسترس) هستند، توسط کلاس فرعی به ارث برده می شوند.

رابطه is-a

وراثت یک رابطه ی is-a است. فقط درصورتی که رابطه is-a بین دو کلاس وجود داشته باشد ، از ارث بری استفاده می کنیم.

در اینجا چند مثال آورده شده است:

  • ماشین وسیله نقلیه است.
  • یک پرتقال یک میوه است.
  • جراح پزشک است.
  • سگ حیوان است.

مثال ۱ : وراثت در جاوا

  1. class Animal {
  2. public void eat() {
  3. System.out.println(“I can eat”);
  4. }
  5. public void sleep() {
  6. System.out.println(“I can sleep”);
  7. }
  8. }
  9. class Dog extends Animal {
  10. public void bark() {
  11. System.out.println(“I can bark”);
  12. }
  13. }
  14. class Main {
  15. public static void main(String[] args) {
  16. Dog dog1 = new Dog();
  17. dog1.eat();
  18. dog1.sleep();
  19. dog1.bark();
  20. }
  21. }

خروجی

I can eat

I can sleep

I can bark

در اینجا ، ما کلاس Dog را از سوپر کلاس Animal به ارث برده ایم. کلاس Dog متد های ()eat()، sleep را از کلاس Animal به ارث می برد.

از این رو ، اشیاء کلاس Dog می توانند متدهای کلاس Dog و کلاس Animal را فراخوانی کنند.

C:\Users\Mr\Desktop\java-working-inheritance.png

مثال ۲ : کلید واژه ی protected

  1. class Animal {
  2. protected String type;
  3. private String color;
  4. public void eat() {
  5. System.out.println(“I can eat”);
  6. }
  7. public void sleep() {
  8. System.out.println(“I can sleep”);
  9. }
  10. public String getColor(){
  11. return color;
  12. }
  13. public void setColor(String col){
  14. color = col;
  15. }
  16. }
  17. class Dog extends Animal {
  18. public void displayInfo(String c){
  19. System.out.println(“I am a ” + type);
  20. System.out.println(“My color is ” + c);
  21. }
  22. public void bark() {
  23. System.out.println(“I can bark”);
  24. }
  25. }
  26. class Main {
  27. public static void main(String[] args) {
  28. Dog dog1 = new Dog();
  29. dog1.eat();
  30. dog1.sleep();
  31. dog1.bark();
  32. dog1.type = “mammal”;
  33. dog1.setColor(“black”);
  34. dog1.displayInfo(dog1.getColor());
  35. }
  36. }

خروجی

I can eat

I can sleep

I can bark

I am a mammal

My color is black

در مثال بالا ، کلاس Animal ویژگی color را دارد که خصوصی است. از این رو ، فقط در Animal قابل مشاهده است. بنابراین ، زیر کلاس Dog نمی تواند آن را به ارث ببرد.

برای دسترسی به ویژگی color ، از متدهای عمومی ()getColor و ()setColor در داخل سوپرکلاس Animal استفاده کرده ایم.

همچنین ، به کلمه کلیدی protected توجه کنید. protected درست مانند public و private یک تنظیم کننده سطح دسترسی است.

اعضای protected همچنین در یک پکیج و زیر کلاس قابل مشاهده هستند. در مثال بالا ، سوپرکلاس Animal دارای ویژگی type است که به عنوان protected اعلام شده است. از این رو ، زیر کلاس Dog می تواند به آن دسترسی پیدا کند.

متد overriding

از مثال های فوق دریافتیم که اشیاء یک زیر کلاس می توانند به متد های سوپر کلاس دسترسی پیدا کنند و همچنین متد های خاص خود را تعریف کنند.

چه اتفاقی می افتد اگر همان متد در هر دو سوپرکلاس و زیر کلاس تعریف شود؟

خوب در این حالت متد های موجود در زیر کلاس متد های موجود در سوپر کلاس را رد می کنند. مثلا،

مثال ۳ : مثال متد overriding

  1. class Animal {
  2. protected String type = “animal”;
  3. public void eat() {
  4. System.out.println(“I can eat”);
  5. }
  6. public void sleep() {
  7. System.out.println(“I can sleep”);
  8. }
  9. }
  10. class Dog extends Animal {
  11.   @Override
  12. public void eat() {
  13. System.out.println(“I eat dog food”);
  14. }
  15. public void bark() {
  16. System.out.println(“I can bark”);
  17. }
  18. }
  19. class Main {
  20. public static void main(String[] args) {
  21. Dog dog1 = new Dog();
  22. dog1.eat();
  23. dog1.sleep();
  24. dog1.bark();
  25. }
  26. }

خروجی

I eat dog food

I can sleep

I can bark

در اینجا ، متد ()eat هم در سوپر کلاس Animal و هم زیر کلاس Dog وجود دارد. شی dog1 را از زیر کلاس Dog ایجاد کردیم.

وقتی متد ()eat را با استفاده از شی dog1 صدا می زنیم ، متد داخل کلاس Dog صدا زده می شود و متد سوپر کلاس صدا زده نمی شود. این کار اصطلاحا متد overriding نامیده می شود.

در برنامه بالا ، ما از متد overriding استفاده کرده ایم تا به کامپایلر بگوییم که در حال غلبه بر متدی هستیم. با این حال ، اجباری نیست.

اگر ما نیاز به فراخوانی متد ()eat از Animal از زیر کلاس Dog داریم ، از کلمه کلیدی super استفاده می کنیم.

مثال ۴ : کلمه کلیدی super

  1. class Animal {
  2. public Animal() {
  3. System.out.println(“I am an Animal”);
  4. }
  5. public void eat() {
  6. System.out.println(“I can eat”);
  7. }
  8. }
  9. class Dog extends Animal {
  10. public Dog(){
  11. super();
  12. System.out.println(“I am a dog”);
  13. }
  14. @Override
  15. public void eat() {
  16. super.eat();
  17. System.out.println(“I eat dog food”);
  18. }
  19. public void bark() {
  20. System.out.println(“I can bark”);
  21. }
  22. }
  23. class Main {
  24. public static void main(String[] args) {
  25. Dog dog1 = new Dog();
  26. dog1.eat();
  27. dog1.bark();
  28. }
  29. }

خروجی

I am an Animal

I am a dog

I can eat

I eat dog food

I can bark

در اینجا ، ما از کلمه کلیدی super برای صدا زدن سازنده با استفاده از ()super استفاده کرده ایم. همچنین ، با استفاده از ()super.eat از متد ()eat سوپرکلاس Animal استفاده کرده ایم.

هنگام استفاده از سازنده و متد ، به تفاوت استفاده از super توجه کنید.

انواع وراثت

۵ نوع ارث بری وجود دارد:

  • وراث منفرد – کلاس B فقط از کلاس A ارث بری می کند.
  • وراثت چند سطحی – کلاس B از کلاس A ارث بری می کند، سپس کلاس C از کلاس B ارث بری می کند.
  • وراثت سلسله مراتبی – کلاس A به عنوان ابر کلاس برای کلاس های B ، C و D عمل می کند.
  • وراثت چندگانه – کلاس C از اینترفیس های A و B ارث بری می کند.
  • وراثت ترکیبی – ترکیبی از دو یا چند نوع ارث بری.

جاوا از ارث بری چندگانه و ترکیبی از طریق کلاس پشتیبانی نمی کند. اما می توان با کمک اینترفیس ها از آن استفاده کرد.

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

مهمترین کاربرد، قابلیت استفاده مجدد از کد است. کدی که در کلاس والد وجود دارد نیاز به نوشتن مجدد در کلاس فرزند ندارد.

یکی دیگر از کاربردها ، استفاده از متد overriding است به گونه ای که می توان به چند ریختی زمان اجرا دست یافت.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

1 دیدگاه. ارسال دیدگاه جدید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست