תהליך של המרת סוג נתונים אחד לאחר מכונה Typecasting ו מעלה ו מוריד הוא הסוג של הדפסת אובייקטים. ב-Java, האובייקט יכול להיות גם מודפס כמו סוגי הנתונים. הוֹרֶה ו יֶלֶד אובייקטים הם שני סוגים של אובייקטים. אז, ישנם שני סוגים של יציאת סוגים אפשריים עבור אובייקט, כלומר, הורה לילד ו ילד להורה או יכול לומר מעלה ו מוריד .
ב Java , ניתן גם לכתוב את האובייקט כמו סוגי הנתונים. הוֹרֶה ו חפצי ילדים הם שני סוגים של חפצים. אז, ישנם שני סוגים של הדפסת סוגים אפשריים עבור אובייקט, כלומר, הורה לילד ו ילד להורה או יכול לומר מעלה ו מוריד .
Typecasting משמש כדי לוודא אם משתנים מעובדים כהלכה על ידי פונקציה או לא. ב מעלה ו מוריד , אנחנו מטיפוס חפץ ילד לחפץ אב ו חפץ הורה לחפץ ילד בּוֹ זְמַנִית. אנו יכולים לבצע Upcasting באופן מרומז או מפורש, אך downcasting אינו אפשרי באופן מרומז.
בואו נצלול לעומק של שני סוגי יציקת האובייקטים האלה:
לפזר עצים
1) שידור
מעלה הוא סוג של יציאת אובייקטים שבה א חפץ ילד הוא מודפס ל-a אובייקט מחלקה אב . על ידי שימוש ב-Upcasting, נוכל לגשת בקלות למשתנים ולשיטות של כיתת האב לכיתה הילד. כאן, אנחנו לא ניגשים לכל המשתנים והשיטה. אנו ניגשים רק לכמה משתנים ושיטות שצוינו של כיתת הילד. מעלה ידוע גם בשם הַכלָלָה ו הִתרַחֲבוּת .
UpcastingExample.java
class Parent{ void PrintData() { System.out.println('method of parent class'); } } class Child extends Parent { void PrintData() { System.out.println('method of child class'); } } class UpcastingExample{ public static void main(String args[]) { Parent obj1 = (Parent) new Child(); Parent obj2 = (Parent) new Child(); obj1.PrintData(); obj2.PrintData(); } }
תְפוּקָה:
2) הורדה
מעלה הוא סוג אחר של העברת אובייקטים. ב-Upcasting, אנו מקצים אובייקט התייחסות של כיתה אב לכיתה הבת. ב-Java, לא נוכל להקצות אובייקט התייחסות של מחלקה אב למחלקת הילד, אבל אם נבצע הורדה, לא נקבל שום שגיאה בזמן קומפילציה. עם זאת, כאשר אנו מפעילים אותו, הוא זורק את 'ClassCastException' . עכשיו הנקודה היא אם ההורדה לא אפשרית בג'אווה, אז למה זה מותר על ידי המהדר? ב-Java, תרחישים מסוימים מאפשרים לנו לבצע הורדה. כאן, אובייקט המשנה מופנה על ידי מחלקת האב.
למחוק את הקובץ ב-java
להלן דוגמה להורדה שבה מוסברים גם התרחישים התקפים וגם התרחישים הלא חוקיים:
DowncastingExample.java
מרובה
//Parent class class Parent { String name; // A method which prints the data of the parent class void showMessage() { System.out.println('Parent method is called'); } } // Child class class Child extends Parent { int age; // Performing overriding @Override void showMessage() { System.out.println('Child method is called'); } } public class Downcasting{ public static void main(String[] args) { Parent p = new Child(); p.name = 'Shubham'; // Performing Downcasting Implicitly //Child c = new Parent(); // it gives compile-time error // Performing Downcasting Explicitly Child c = (Child)p; c.age = 18; System.out.println(c.name); System.out.println(c.age); c.showMessage(); } }
תְפוּקָה:
למה אנחנו צריכים העלאה והורדה?
ב-Java, אנו משתמשים לעתים רחוקות מעלה . אנו משתמשים בו כאשר אנו צריכים לפתח קוד שעוסק רק בכיתה האב. מוריד משמש כאשר אנו צריכים לפתח קוד הניגש להתנהגויות של כיתת הילד.
ההבדל בין Upcasting לבין Downcasting
אלו הם ההבדלים הבאים בין Upcasting ו-downcasting:
כן לא | מעלה | מוריד |
---|---|---|
1. | אובייקט צאצא מסודר לאובייקט אב. | ההפניה של אובייקט כיתה האב מועברת לכיתה הילד. |
2. | אנו יכולים לבצע Upcasting באופן מרומז או מפורש. | אין אפשרות להוריד במרומז. |
3. | בכיתה הילד, נוכל לגשת לשיטות ולמשתנים של כיתת האב. | ניתן לגשת לשיטות והמשתנים של שתי הכיתות (הורה וילד). |
4. | אנו יכולים לגשת לכמה שיטות מוגדרות של כיתת הילד. | ניתן לגשת לכל השיטות והמשתנים של שתי המחלקות על ידי ביצוע הורדה. |
5. | אב p = new Parent() | הורה p = new Child() ילד ג = (ילד)p; |