logo

ירושה בג'אווה

  1. יְרוּשָׁה
  2. סוגי ירושה
  3. מדוע ירושה מרובה אינה אפשרית בג'אווה במקרה של מחלקה?

ירושה בג'אווה הוא מנגנון שבו אובייקט אחד רוכש את כל התכונות וההתנהגויות של אובייקט אב. זה חלק חשוב של אופס (מערכת תכנות מונחה עצמים).

הרעיון מאחורי ירושה בג'אווה הוא שאתה יכול ליצור חדש שיעורים שבנויים על כיתות קיימות. כאשר אתה יורש ממחלקה קיימת, אתה יכול לעשות שימוש חוזר בשיטות ובשדות של מחלקת האב. יתר על כן, אתה יכול להוסיף שיטות ושדות חדשים גם בכיתה הנוכחית שלך.

ירושה מייצגת את מערכת יחסים IS-A אשר ידוע גם בשם א הורה-ילד מערכת יחסים.

למה להשתמש בירושה ב-Java

מונחים המשמשים בירושה

    מעמד:מחלקה היא קבוצה של אובייקטים בעלי מאפיינים משותפים. זוהי תבנית או שרטוט שממנו נוצרים אובייקטים.כיתת משנה/כיתת ילד:תת-מחלקה היא מחלקה שיורשת את המחלקה האחרת. זה נקרא גם כיתה נגזרת, כיתה מורחבת או כיתת ילד.כיתת על/כיתת הורים:Superclass הוא המחלקה שממנה תת-מחלקה יורשת את התכונות. זה נקרא גם כיתת בסיס או כיתת אב.שימוש חוזר:כפי שהשם מציין, שימוש חוזר הוא מנגנון המאפשר לך לעשות שימוש חוזר בשדות ובשיטות של המחלקה הקיימת כאשר אתה יוצר מחלקה חדשה. אתה יכול להשתמש באותם שדות ושיטות שהוגדרו כבר במחלקה הקודמת.

התחביר של Java Inheritance

 class Subclass-name extends Superclass-name { //methods and fields } 

ה מרחיב את מילת המפתח מציין שאתה יוצר מחלקה חדשה הנובעת ממחלקה קיימת. המשמעות של 'מאריך' היא להגדיל את הפונקציונליות.

דוגמאות לקוד לדוגמה של javascript

בטרמינולוגיה של ג'אווה, מחלקה שעוברת בירושה נקראת הורה או מחלקה על, והמחלקה החדשה נקראת ילד או תת מחלקה.


דוגמה להורשה של Java

ירושה בג'אווה

כפי שמוצג באיור לעיל, מתכנת הוא תת-הכיתה והעובד הוא מחלקת העל. הקשר בין שני הכיתות הוא מתכנת IS-A Employee . זה אומר שמתכנת הוא סוג של עובד.

q1 q2 q3 q4
 class Employee{ float salary=40000; } class Programmer extends Employee{ int bonus=10000; public static void main(String args[]){ Programmer p=new Programmer(); System.out.println('Programmer salary is:'+p.salary); System.out.println('Bonus of Programmer is:'+p.bonus); } } 
בדוק את זה עכשיו
 Programmer salary is:40000.0 Bonus of programmer is:10000 

בדוגמה שלמעלה, אובייקט מתכנת יכול לגשת לשדה של מחלקה משלו כמו גם של מחלקה Employee, כלומר שימוש חוזר בקוד.


סוגי ירושה ב-Java

על בסיס מחלקה, יכולים להיות שלושה סוגים של ירושה ב-Java: יחיד, רב-שכבתי והיררכי.

בתכנות ג'אווה, ירושה מרובה והיברידית נתמכת באמצעות ממשק בלבד. על ממשקים נלמד בהמשך.

סוגי ירושה בג'אווה

הערה: ירושה מרובה אינה נתמכת ב-Java דרך הכיתה.

כאשר מחלקה אחת יורשת מחלקות מרובות, זה ידוע בתור ירושה מרובה. לדוגמה:

ירושה מרובה בג'אווה

דוגמה בירושה בודדת

כאשר מחלקה יורשת מחלקה אחרת, היא ידועה בשם א ירושה בודדת . בדוגמה המופיעה להלן, מחלקת הכלב יורשת את מחלקת החיה, כך שישנה הירושה הבודדת.

פקודת הפעלה של לינוקס

קובץ: TestInheritance.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }} 

תְפוּקָה:

 barking... eating... 

דוגמה להורשה רב-שכבתית

כאשר יש שרשרת של ירושה, זה ידוע בשם ירושה רב-שכבתית . כפי שניתן לראות בדוגמה המובאת למטה, מחלקה BabyDog יורשת את המחלקה Dog אשר שוב יורשת את המחלקה Animal, כך שישנה ירושה רב-שכבתית.

קובץ: TestInheritance2.java

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class BabyDog extends Dog{ void weep(){System.out.println('weeping...');} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }} 

תְפוּקָה:

 weeping... barking... eating... 

דוגמה להורשה היררכית

כאשר שתי מחלקות או יותר יורשות מחלקה בודדת, היא ידועה בשם ירושה היררכית . בדוגמה המובאת להלן, כיתות כלב וחתול יורשות את מחלקת החיות, כך שיש ירושה היררכית.

קובץ: TestInheritance3.java

10 מתוך 50.00
 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void bark(){System.out.println('barking...');} } class Cat extends Animal{ void meow(){System.out.println('meowing...');} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }} 

תְפוּקָה:

 meowing... eating... 

ש) מדוע ירושה מרובה אינה נתמכת ב-java?

כדי להפחית את המורכבות ולפשט את השפה, ירושה מרובה אינה נתמכת ב-java.

שקול תרחיש שבו A, B ו-C הם שלוש מחלקות. מחלקה C יורשת את מחלקות A ו-B. אם למחלקות A ו-B יש אותה שיטה ואתה קורא לה מ- child class object, תהיה אי בהירות לקרוא לשיטה של ​​מחלקה A או B.

מכיוון ששגיאות זמן הידור עדיפות משגיאות זמן ריצה, Java מעבד שגיאות זמן הידור אם אתה יורש 2 מחלקות. אז בין אם יש לך אותה שיטה או שונה, תהיה שגיאת זמן קומפילציה.

 class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were public static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } } 
בדוק את זה עכשיו
 Compile Time Error