SlideShare ist ein Scribd-Unternehmen logo
1 von 8
Downloaden Sie, um offline zu lesen
‫משתנ‬‫ים‬‫מחלקה‬ ‫מטיפוס‬-Class type Variables
:‫הבאות‬ ‫ההגדרות‬ ‫וקיימות‬ ‫בהנחה‬
public interface InterfaceName {}
public class ClassNameA {}
public class ClassNameB extends ClassNameA implements InterfaceName {}
:‫בלבד‬ ‫טיפוסים‬ ‫משלושה‬ ‫מאחד‬ ‫להיות‬ ‫יכול‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫את‬ ‫להכיל‬ ‫שמיועד‬ ‫המשתנה‬
‫הראשון‬,‫המחלקה‬ ‫מטיפוס‬:‫הטריוויאלי‬ ‫הטיפוס‬ ‫זהו‬ ,‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫אנו‬ ‫ממנה‬
ClassNameB cnb=new ClassNameB();
‫השני‬,‫למחלקה‬ ‫שמורישה‬ ‫מחלקה‬ ‫מטיפוס‬‫מטיפ‬ ‫כלומר‬ ,‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫אנו‬ ‫ממנה‬‫ממנה‬ ‫שהמחלקה‬ ‫מחלקה‬ ‫וס‬
.‫הגדרתה‬ ‫את‬ ‫מרחיבה‬ ‫האובייקט‬ ‫את‬ ‫יוצרים‬
ClassNameA cna=new ClassNameB();
‫השלישי‬,‫המחלקה‬ ‫אותו‬ ‫ממשק‬ ‫מטיפוס‬‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫ממנה‬‫מיישמת‬.
InterfaceName in=new ClassNameB();
‫(הרפרנס‬ ‫החזרה‬ ‫ערך‬ ‫את‬ ‫שנציב‬ ‫לאחר‬‫(בהתאם‬ ‫שלו‬ ‫למאפיינים‬ ‫לגשת‬ ‫יהיה‬ ‫ניתן‬ ,‫לכך‬ ‫המיועד‬ ‫במשתנה‬ )‫לאובייקט‬
:‫כך‬ ‫לדוגמה‬ ,)‫מתודה‬ ‫או‬ ‫(משתנה‬ ‫המאפיין‬ ‫ושם‬ ‫מפרידה‬ ‫נקודה‬ ,‫המשתנה‬ ‫שם‬ ‫ציון‬ ‫ע"י‬ )‫גישה‬ ‫להרשאות‬
objectName.methodName();
‫ה‬ ‫ממנו‬ ‫בטיפוס‬ ‫שהוגדרו‬ ‫למאפיינים‬ ‫ורק‬ ‫אך‬ ‫לגשת‬ ‫יכול‬ ‫משתנה‬ ‫של‬ ‫סוג‬ ‫שכל‬ ‫לב‬ ‫לשים‬ ‫יש‬‫אובייקט‬ ‫לאיזה‬ ‫קשר‬ ‫מבלי‬ ‫נוצר‬ ‫וא‬
.‫מחזיק‬ ‫הוא‬
.‫האחרונה‬ ‫הדוגמה‬ ‫את‬ ‫מעט‬ ‫נעבה‬ ‫יותר‬ ‫טוב‬ ‫הנושא‬ ‫את‬ ‫להבין‬ ‫מנת‬ ‫על‬
‫תרשים‬ ‫מתוך‬UML:‫נתון‬
:‫הבאות‬ ‫ההגדרות‬ ‫שקיימות‬ ‫להבין‬ ‫נוכל‬
public interface InterfaceName {
public abstract void interfaceMethod();
}
public class ClassNameA {
int classNameAVar;
}
public class ClassNameB extends ClassNameA implements InterfaceName {
int classNameBVar;
public void interfaceMethod () {
}
}
‫ב‬ ‫וכי‬-Runner.)'‫וכד‬ ‫אובייקטים‬ ‫(יצירת‬ ‫והממשק‬ ‫למחלקות‬ ‫תלות‬ ‫קשרי‬ ‫על‬ ‫המעידים‬ ‫שימושים‬ ‫נעשים‬
‫לכל‬ ‫גישה‬ ‫שתהיה‬ ‫כך‬ ,‫נוצר‬ ‫הוא‬ ‫ממנה‬ ‫המחלקה‬ ‫מסוג‬ ‫במשתנה‬ ‫נציב‬ ‫אליו‬ ‫הרפרנס‬ ‫שאת‬ ‫אובייקט‬ ‫ויצרנו‬ ‫נניח‬ ,‫כעת‬
:‫במחלקה‬ ‫שהוגדרו‬ ‫המאפיינים‬
ClassNameB cnb=new ClassNameB();
‫אובייקטים‬ ‫ניצור‬ ‫לא‬ ,‫מכאן‬:‫קודם‬ ‫שהוצגו‬ ‫האפשריים‬ ‫מהסוגים‬ ‫במשתנים‬ ‫שיצרנו‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫את‬ ‫נפיץ‬ ‫אלא‬ ,‫חדשים‬
ClassNameA cna = cnb;
InterfaceName in = cnb;
‫מחלקה‬ ‫מסוג‬ ‫אובייקט‬ ‫בידנו‬ ‫יש‬ ,‫זאת‬ ‫משעשינו‬ClassNameB‫שהרפרנס‬‫שהצגנו‬ ‫המשתנים‬ ‫טיפוסי‬ ‫בשלושת‬ ‫מוכל‬ ‫אליו‬
‫המשתנים‬ ‫שלושת‬ ,‫כלומר‬ ,‫הקודמת‬ ‫בדוגמה‬in, cna, cnb‫מהם‬ ‫אחד‬ ‫כל‬ ‫של‬ ‫הגישה‬ ‫אך‬ ,‫האובייקט‬ ‫לאותו‬ ‫מתייחסים‬
:‫נוצרו‬ ‫הם‬ ‫מהם‬ ‫הטיפוסים‬ ‫מהגדרות‬ ‫אחת‬ ‫בכל‬ ‫הוגדרו‬ ‫מאפיינים‬ ‫לאילו‬ ‫בהתאם‬ ‫תהיה‬ ‫האובייקט‬ ‫של‬ ‫למאפיינים‬
‫המשתנה‬in‫המתודה‬ ‫את‬ ‫רק‬ "‫"לראות‬ ‫יכול‬interfaceMethod()‫מהטיפוס‬ ‫שמגיעה‬ ‫היחידה‬ ‫והיא‬ ‫היות‬InterfaceName
:‫נוצר‬ ‫הוא‬ ‫ממנו‬
in.interfaceMethod();
‫המשתנה‬cna‫המשתנה‬ ‫את‬ ‫רק‬ "‫"לראות‬ ‫יכול‬classNameAVar‫מהטיפוס‬ ‫שמגיע‬ ‫היחיד‬ ‫והוא‬ ‫היות‬ClassNameA‫הוא‬ ‫ממנו‬
:‫נוצר‬
cna.classNameAVar=0;
‫המשתנה‬cnb‫המשתנה‬ ‫את‬ "‫"לראות‬ ‫יכול‬classNameBVar‫במחלקה‬ ‫מוגדר‬ ‫והוא‬ ‫היות‬ClassNameB,‫נוצר‬ ‫הוא‬ ‫ממנה‬
‫המשתנה‬ ‫את‬ "‫"לראות‬ ‫יכול‬ ‫הוא‬ ,‫כן‬ ‫כמו‬classNameAVar‫מהמחלקה‬ ‫יורש‬ ‫והוא‬ ‫היות‬ClassNameA,
‫המתודה‬ ‫את‬ "‫"לראות‬ ‫יכול‬ ‫והוא‬interfaceMethod()‫הממשק‬ ‫את‬ ‫מממש‬ ‫והוא‬ ‫היות‬InterfaceName:
cnb.interfaceMethod();
cnb.classNameAVar=0;
cnb.classNameBVar=0;
‫האפשריים‬ ‫המשתנים‬ ‫מטיפוסי‬ ‫אחד‬ ‫בכל‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫להצבת‬ ‫סיבות‬ ‫מעט‬ ‫לא‬ ‫יש‬‫שעומדת‬ ‫ללוגיקה‬ ‫בהתאם‬ ‫המשתנות‬
‫לחלק‬ ‫הגישה‬ ‫את‬ "‫"להסתיר‬ ‫היכולת‬ ‫הוא‬ ‫המתקבלים‬ ‫המידיים‬ ‫היתרונות‬ ‫אחד‬ ,‫לראות‬ ‫שניתן‬ ‫כפי‬ ‫אך‬ ,‫התכנית‬ ‫כתיבת‬ ‫מאחורי‬
.‫אליו‬ ‫הרפרנס‬ ‫את‬ ‫המכיל‬ ‫המשתנה‬ ‫לסוג‬ ‫בהתאם‬ ,‫אובייקט‬ ‫של‬ ‫מהמאפיינים‬
‫בתפ‬ ‫גרסה‬ ‫להפיץ‬ ‫ומעוניינת‬ ‫תוכנה‬ ‫המפתחת‬ ‫לחברה‬ ‫זאת‬ ‫לדמות‬ ‫ניתן‬‫הקהל‬ ‫בקרב‬ ‫מודעות‬ ‫לעורר‬ ‫ע"מ‬ ,‫בחינם‬ ,‫רחבה‬ ‫וצה‬
‫וכבר‬ ‫היות‬ ‫המוצר‬ ‫את‬ ‫לקנות‬ ‫יחליטו‬ ‫אנשים‬ ‫מאוד‬ ‫שמעט‬ ‫הרי‬ ,‫מלאה‬ ‫גרסה‬ ‫תהה‬ ‫שתופץ‬ ‫הגרסה‬ ‫אם‬ .‫שפיתחה‬ ‫המוצר‬ ‫לגבי‬
‫ממנה‬ ‫שהוסרו‬ ,‫שלה‬ ‫הביצועים‬ ‫מבחינת‬ ‫שמוגבלת‬ ‫גרסה‬ ‫החברה‬ ‫מפיצה‬ ,‫כן‬ ‫ועל‬ ‫מלאה‬ ‫בצורה‬ ‫מתפקד‬ ,‫ביד‬ ‫אותו‬ ‫להם‬ ‫יש‬
‫מסו‬ ‫פיצ'רים‬‫לראות‬ ‫ניתן‬ ‫שדרכה‬ ‫גרסה‬ ‫מקבל‬ ,‫הניסיון‬ ‫לגרסת‬ ‫שנחשף‬ ‫אדם‬ ‫אותו‬ .‫בה‬ ‫השימוש‬ ‫זמן‬ ‫שהוגבל‬ ‫או‬ ‫ימים‬
‫את‬ ‫ורק‬ ‫אך‬ ‫חושף‬ ‫ממשק‬ ‫מסוג‬ ‫משתנה‬ ‫שאותו‬ ‫כשם‬ ‫בדיוק‬ ,‫המפתחים‬ ‫בידי‬ ‫שנחשפו‬ ‫פיצ'רים‬ ‫באותם‬ ‫ורק‬ ‫אך‬ ‫ולהשתמש‬
‫וירשה‬ ‫אותו‬ ‫שמימשה‬ ‫זו‬ ,‫המשוכללת‬ ‫המחלקה‬ ‫של‬ ‫אלו‬ ‫את‬ ‫ולא‬ ‫בו‬ ‫שמוגדרים‬ ‫הפיצ'רים‬‫שלנו‬ ‫בדוגמה‬ ‫אחרת‬ ‫ממחלקה‬
.)‫המלאה‬ ‫התוכנה‬ ‫גרסת‬ :‫(ובהקבלה‬
‫העוסק‬ ‫בפרק‬ ‫הנושא‬ ‫על‬ ‫נדבר‬ ‫אנו‬ ,‫ובנוסף‬ )‫(קיבוץ‬ ‫הדרך‬ ‫באותה‬ ‫שונים‬ ‫מסוגים‬ ‫לאובייקטים‬ ‫לפנות‬ ‫היכולת‬ ‫הוא‬ ‫נוסף‬ ‫יתרון‬
.‫בפולימורפיזם‬
.‫אוטומטית‬ ‫טיפוסים‬ ‫בהמרת‬ ‫מודע‬ ‫לא‬ ‫שימוש‬ ‫נעשה‬ ‫שראינו‬ ‫בדוגמאות‬
‫למעלה/למטה‬ ‫טיפוסים‬ ‫המרת‬-Up/Down Type Casting
‫תוך‬ ‫מורכבות‬ ‫משימות‬ ‫לביצוע‬ ‫ישיר‬ ‫תרגום‬ ‫מקבלת‬ ‫זו‬ ‫יכולת‬ .‫ג'אווה‬ ‫בשפת‬ ‫מאוד‬ ‫חשוב‬ ‫נדבך‬ ‫היא‬ ‫קאסטינג‬ ‫לבצע‬ ‫היכולת‬
.‫כה‬ ‫עד‬ ‫שהכרנו‬ ‫פרימיטיביים‬ ‫טיפוסים‬ ‫בין‬ ‫ההמרות‬ ‫מאותן‬ ‫במהותו‬ ‫נבדל‬ ‫זה‬ ‫קאסטינג‬ .‫פשוט‬ ‫בתחביר‬ ‫שימוש‬
‫טיפוסי‬ ‫בהמרת‬‫המרה‬ .‫מורישה‬ ‫ממחלקה‬ ‫אובייקט‬ ‫כאל‬ ‫יורשת‬ ‫ממחלקה‬ ‫לאובייקט‬ ‫להתייחס‬ ‫היכולת‬ ‫על‬ ‫מדובר‬ ,‫למעלה‬ ‫ם‬
‫בכל‬ ‫מתבצעת‬ ‫והיא‬ ‫היות‬ ‫ממשי‬ ‫טכני‬ ‫צורך‬ ‫בכך‬ ‫אין‬ ,‫הבהירות‬ ‫לשם‬ ‫רק‬ ‫זאת‬ ‫אך‬ ,‫מפורשת‬ ‫בצורה‬ ‫להתבצע‬ ‫יכולה‬ ‫זה‬ ‫מסוג‬
‫אוטומטי‬ ‫באופן‬ ‫מקרה‬–‫תמיד‬ ‫ומצליחה‬ ‫כבטוחה‬ ‫נחשבת‬ ‫זו‬ ‫שהמרה‬ ‫כך‬ ‫מתוך‬ ‫זאת‬.‫בעיות‬ ‫מבלי‬
‫היות‬ ‫שמבצעים‬ ‫ההמרה‬ ‫לסוג‬ ‫לב‬ ‫תשומת‬ ‫מתן‬ ‫תוך‬ ,‫אז‬ ‫וגם‬ ‫מפורש‬ ‫ידני‬ ‫באופן‬ ‫להתבצע‬ ‫צריכה‬ ,‫זאת‬ ‫לעומת‬ ‫למטה‬ ‫המרה‬
.‫מבוקר‬ ‫לא‬ ‫באופן‬ ‫בוצעה‬ ‫באם‬ ‫ריצה‬ ‫ושגיאות‬ ‫קומפילציה‬ ‫שגיאות‬ ‫לגרור‬ ‫ועלולה‬ ‫טריוויאלית‬ ‫פחות‬ ‫זו‬ ‫והמרה‬
‫בתרש‬ ‫ראשית‬ ‫נביט‬ ,‫הנושא‬ ‫את‬ ‫יותר‬ ‫טוב‬ ‫להבין‬ ‫מנת‬ ‫על‬‫ה‬ ‫ים‬-UML:‫הנתון‬
:‫הבאות‬ ‫ההגדרות‬ ‫שקיימות‬ ‫להבין‬ ‫נוכל‬ ‫מתוכו‬
public class Human {
String type="Human";
}
public class Person extends Human {
}
public class Student extends Person {
}
public class Soldier extends Person {
}
‫וכי‬‫ב‬-Runner‫נעשים‬‫שימושים‬‫המעידים‬‫על‬‫קשרי‬‫תלות‬‫למחלקות‬(‫יצירת‬‫אובייקטים‬‫וכד‬.)'
‫אדם‬ ‫מבן‬ ‫יורשים‬ ‫וחייל‬ ‫שסטודנט‬ ‫לראות‬ ‫בקלות‬ ‫ניתן‬ .‫אנוש‬ ‫בן‬ ‫של‬ ‫המחלקות‬ ‫היררכיית‬ ‫של‬ ‫מצומצמת‬ ‫גרסה‬ ‫מתאר‬ ‫התרשים‬
‫מלבד‬ ,‫בג'אווה‬ ‫שהרי‬ ,‫מאובייקט‬ ‫יורש‬ ‫אנוש‬ ‫בן‬ ‫כי‬ ‫נציין‬ ,‫כן‬ ‫כמו‬ .‫אנוש‬ ‫מבן‬ ‫יורש‬ ‫אדם‬ ‫בן‬ ‫וכי‬‫כל‬ ,‫פרימיטיביים‬ ‫טיפוסים‬
.‫אוטומטי‬ ‫באופן‬ ‫מאובייקט‬ ‫יורשים‬ ‫הטיפוסים‬
‫בהגדרת‬ ‫נביט‬Runner:
public class Runner {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.type);
Soldier soldier = new Soldier();
System.out.println(soldier.type);
}
}
‫בהרצת‬ ‫שיתקבל‬ ‫הפלט‬Runner‫את‬ ‫יורשים‬ ‫ושניהם‬ ‫היות‬ ,‫האובייקטים‬ ‫שני‬ ‫עבור‬ ‫זהה‬ ‫כמובן‬ ‫יהיה‬type‫מ‬-Human.
‫למעלה‬ ‫המרה‬)‫אוטומטי‬ ‫באופן‬ ‫מתבצעת‬ ,‫(כאמור‬
public class Runner {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.type);
Soldier soldier = new Soldier();
System.out.println(soldier.type);
Student s = new Student();
System.out.println(s);
Person p = s; // Person p = (Person)s; - ‫אוטומטית‬ ‫למעלה‬ ‫המרה‬–‫ל‬ ‫שקולה‬
System.out.println(p);
/*
‫מה‬‫שיודפס‬
Human
Human
Student@32e0c07c
Student@32e0c07c
*/
}
}
‫שסטודנט‬ ‫היא‬ ‫בעיות‬ ‫בלי‬ ‫תמיד‬ ‫תתבצע‬ ‫כזו‬ ‫שהמרה‬ ‫הסיבה‬ ,‫אדם‬ ‫לבן‬ ‫מסטודנט‬ ‫בוצעה‬ ‫למעלה‬ ‫שהמרה‬ ‫לראות‬ ‫ניתן‬ ‫בדוגמה‬
,‫כן‬ ‫כמו‬ ,‫אדם‬ ‫בן‬ ‫אכן‬ ‫הוא‬‫ה‬ ‫מדיאגרמת‬ ‫ללמוד‬ ‫ניתן‬ ‫זאת‬ ‫כל‬ ,‫אובייקט‬ ‫הוא‬ ‫סטודנט‬ ‫כן‬ ‫וכמו‬ ‫אנוש‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬-UML
.‫הירושה‬ ‫היררכיית‬ ‫את‬ ‫המתארת‬
‫משתנה‬ ‫ע"י‬ ‫שמוחזק‬ ‫וסטודנט‬ ‫סטודנט‬ ‫מסוג‬ ‫משתנה‬ ‫ע"י‬ ‫שמוחזק‬ ‫שסטודנט‬ ‫הוא‬ ,‫בדוגמה‬ ‫אליו‬ ‫לב‬ ‫לשים‬ ‫שחשוב‬ ‫נוסף‬ ‫דבר‬
‫הד‬ ‫כך‬ ‫במקרה‬ ‫לא‬ .‫האופן‬ ‫באותו‬ ‫מודפסים‬ ‫אדם‬ ‫בן‬ ‫מסוג‬‫בר‬-.‫עצמו‬ ‫האובייקט‬ ‫על‬ ‫השפעה‬ ‫אין‬ ‫באובייקט‬ ‫שמחזיק‬ ‫למשתנה‬
‫המשתנה‬ ‫דרך‬ ,‫ובדוגמה‬ ,‫שונה‬ ‫בצורה‬ ‫לאובייקט‬ ‫להתייחס‬ ‫ניתן‬ ‫יהיה‬ ‫לפיה‬ ‫תווית‬ ‫כמעיין‬ ‫משמש‬ ‫המשתנה‬p,‫אדם‬ ‫בן‬ ‫מסוג‬
‫לאובייקט‬ ‫ברפרנס‬ ‫המחזיק‬s‫שבנאד‬ ‫או‬ ‫אדם‬ ‫בבן‬ ‫שהוגדרו‬ ‫ומתודות‬ ‫למשתנים‬ ‫ורק‬ ‫אך‬ ‫לפנות‬ ‫נוכל‬ ,‫סטודנט‬ ‫מסוג‬‫ירש‬ ‫ם‬
‫שהפנייה‬ ‫עוד‬ ‫כל‬ ‫יוסתרו‬ ,‫לסטודנט‬ ,‫בנאדם‬ ‫של‬ ‫ובמקרה‬ ‫הירושה‬ ‫בהיררכיית‬ ‫שמתחת‬ ‫למה‬ ‫ששייכים‬ ‫השדות‬ ,‫מלמעלה‬
‫למטה‬ ‫ידנית‬ ‫המרה‬ ‫שתיעשה‬ ‫שברגע‬ ‫לציין‬ ‫חשוב‬ .‫שמומש‬ ‫מממשק‬ ‫או‬ ‫מורישה‬ ‫ממחלקה‬ ,"‫"מלמעלה‬ ‫תיעשה‬ ‫לאובייקט‬
‫חסו‬ ‫שהיו‬ ‫המאפיינים‬ ‫כל‬ ‫גם‬ ‫יחזרו‬ ,‫סטודנט‬ ‫מטיפוס‬ ‫למשתנה‬ ‫בחזרה‬.‫כה‬ ‫כד‬ ‫מים‬
‫למטה‬ ‫המרה‬)‫ידני‬ ‫באופן‬ ‫מתבצעת‬ ,‫(כאמור‬
‫אנחנו‬ ‫האם‬ ‫עצמנו‬ ‫את‬ ‫לשאול‬ ‫עלינו‬ ‫למטה‬ ‫קאסטינג‬ ‫עושים‬ ‫כשאנחנו‬ .‫מבוקרת‬ ‫בצורה‬ ‫להיעשות‬ ‫צריכה‬ ‫למטה‬ ‫ההמרה‬
.‫האובייקט‬ ‫של‬ ‫המהות‬ ‫למקור‬ ‫בהתאם‬ ‫לא‬ ‫או‬ ‫חוקית‬ ‫המרה‬ ‫מבצעים‬
,‫שהבאנו‬ ‫בדוגמה‬p‫ברפרנס‬ ‫החזיק‬.‫וחוקית‬ ‫אפשרית‬ ‫סטודנט‬ ‫לטיפוס‬ ‫בחזרה‬ ‫למטה‬ ‫המרה‬ ‫ולכן‬ ‫סטודנט‬ ‫מסוג‬ ‫לאובייקט‬
Student s1 = new Student();
System.out.println(s1);
Person p = s1; // Person p = (Person)s1; - ‫אוטומטית‬ ‫למעלה‬ ‫המרה‬–‫ל‬ ‫שקולה‬
System.out.println(p);
Student s2=(Student)p; // ‫המרה‬‫מלכתחילה‬ ‫שלו‬ ‫שהיו‬ ‫התכונות‬ ‫את‬ ‫לסטודנט‬ ‫ומחזירים‬ ‫היות‬ ‫תקינה‬ ‫למטה‬ ‫ידנית‬
( ‫ריצה‬ ‫שגיאת‬ ‫תניב‬ ,‫חייל‬ ‫מסוג‬ ‫לטיפוס‬ ‫למטה‬ ‫להמיר‬ ‫ניסיון‬ClassCastException‫זאת‬ ,‫קומפילציה‬ ‫מבחינת‬ ‫תתאפשר‬ ‫אך‬ ,)
‫ומ‬ ‫היות‬-p‫מבחינת‬ ‫שמתחתיו‬ ‫לאובייקט‬ ‫ברפרנס‬ ‫שהחזיק‬ ‫משתנה‬ ‫רק‬ ‫היה‬ ‫זה‬ ,‫אובייקט‬ ‫נוצר‬ ‫לא‬,‫מחלקתית‬ ‫היררכיה‬
‫המתכנת‬ ,‫המתכנת‬ ‫בידי‬ ‫היא‬ ‫לחוקיות‬ ‫האחריות‬ ,‫כן‬ ‫ועל‬ ,)‫אדם‬ ‫בבן‬ ‫(או‬ ‫בחייל‬ ‫או‬ ‫בסטודנט‬ ‫או‬ ‫להחזיק‬ ‫יכול‬ ‫הוא‬ ‫תיאורטית‬
:‫מדובר‬ ‫בפועל‬ ‫אובייקט‬ ‫באיזה‬ ‫לדעת‬ ‫שצריך‬ ‫זה‬ ‫הוא‬
Soldier sol=new Soldier();
sol=(Soldier)p;
‫במי‬ ‫להשתמש‬ ‫ניתן‬ ,‫האובייקט‬ ‫מקור‬ ‫מה‬ ‫לדעת‬ ‫ע"מ‬‫האופרטור‬ ,‫השמורה‬ ‫לה‬instanceof:‫הבא‬ ‫באופן‬
Student s3 = new Student();
Human h = s3; //‫למעלה‬ ‫המרה‬
if(h instanceof Student) { //‫בדיקה‬
Student s4 = (Student)h; //‫תקינה‬ ‫למטה‬ ‫המרה‬
}
‫אם‬‫מאיזה‬ ‫בוודאות‬ ‫שידוע‬ ,‫אובייקט‬ ‫ממנו‬ ‫נוצר‬ ‫שכן‬ ‫טיפוס‬ ‫של‬ ‫למטה‬ ‫בהמרה‬ ‫מדובר‬‫לטיפוס‬ ‫ממנו‬ ‫להמיר‬ ‫וננסה‬ ‫הוא‬ ‫טיפוס‬
( ‫ריצה‬ ‫שגיאת‬ ‫נקבל‬ ,‫אחר‬ClassCastException:)‫אדם‬ ‫בן‬ ‫הוא‬ ‫(סטודנט‬ ‫סטודנט‬ ‫לא‬ ‫הוא‬ ‫אדם‬ ‫שבן‬ ‫ברור‬ ‫הבאה‬ ‫בדוגמה‬ ,)
Person per=new Person();
Student s5=(Student)per;
,‫וממי‬ ‫למי‬ ‫להמיר‬ ‫ניתן‬ ‫מי‬ ‫את‬ ‫ההחלטה‬ ‫את‬ ‫לפשט‬ ‫מנת‬ ‫על‬‫היא‬ ‫להישאל‬ ‫שצריכה‬ ‫השאלה‬"?‫האובייקט‬ ‫מקור‬ ‫"מה‬
.‫אנוש‬ ‫לבן‬ ‫אותו‬ ‫להמיר‬ ‫ניתן‬ ,‫אנוש‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬ ‫אם‬ .‫אדם‬ ‫לבן‬ ‫אותו‬ ‫להמיר‬ ‫ניתן‬ ,‫אדם‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬ ‫אם‬
.‫אותם‬ ‫להמיר‬ ‫ניתן‬ ‫לא‬ ‫ולכן‬ ‫לא‬ ?‫אדם‬ ‫בן‬ ‫הוא‬ ‫אנוש‬ ‫בן‬ ‫האם‬ ?‫חייל‬ ‫הוא‬ ‫אנוש‬ ‫בן‬ ‫האם‬
,‫משמע‬ ?‫אדם‬ ‫כבן‬ ‫הזה‬ ‫לסטודנט‬ ‫מתייחס‬ ‫אני‬ ‫האם‬‫מה‬ ‫כל‬ ‫על‬ ‫איתו‬ "‫"לדבר‬ ‫ואז‬ ‫סטודנט‬ ‫כאל‬ ‫גם‬ ‫אליו‬ ‫להתייחס‬ ‫יכול‬ ‫אני‬
‫על‬ ‫רק‬ ‫אלא‬ ,‫סטודנט‬ ‫כאל‬ ‫אליו‬ ‫לדבר‬ ‫יכול‬ ‫לא‬ ‫אני‬ ,‫אדם‬ ‫בן‬ ‫כאל‬ ‫אליו‬ ‫מתייחס‬ ‫שאני‬ ‫עוד‬ ‫כל‬ ‫אך‬ ,‫סטודנט‬ ‫עם‬ ‫לדבר‬ ‫שאפשר‬
.‫אדם‬ ‫לבני‬ ‫שכלליים‬ ‫דברים‬
‫היכו‬ ‫הוא‬ ,‫ג'אווה‬ ‫בשפת‬ ‫הטיפוסים‬ ‫המרת‬ ‫של‬ ‫הבולטים‬ ‫היתרונות‬ ‫אחד‬‫שונים‬ ‫סוגים‬ ‫לקבל‬ ‫שיכולות‬ ‫כלליות‬ ‫מתודות‬ ‫לייצר‬ ‫לת‬
‫אנוש‬ ‫בני‬ ‫וגם‬ ‫אדם‬ ‫בני‬ ‫גם‬ ,‫סטודנטים‬ ‫גם‬ ,‫חיילים‬ ‫גם‬ ‫לקבל‬ ‫שתדע‬ ‫מתודה‬ ‫לייצר‬ ‫וברצוננו‬ ‫נניח‬ .‫כארגומנט‬ ‫אובייקטים‬ ‫של‬
:‫הבאה‬ ‫בהגדרה‬ ‫נביט‬ .‫גנרית‬ ‫בצורה‬
public void whois(Human h) {
System.out.println("This is a "+h);
}
‫של‬ ‫ההיררכיה‬ ‫במורד‬ ‫או‬ ‫שברמת‬ ‫מהמחלקות‬ ‫אחד‬ ‫לכל‬ ‫רפרנסים‬ ‫זו‬ ‫למתודה‬ ‫לשלוח‬ ‫נוכל‬ ,‫זה‬ ‫באופן‬Human:
whois(new Student());
whois(new Person());
whois(new Human());
:‫כזה‬ ‫פלט‬ ‫ונקבל‬
This is a Student@603a3e21
This is a Person@fc519e2
This is a Human@55264c84
‫את‬ ‫להציב‬ ‫ניתן‬ ‫בהם‬ ‫המשתנים‬ ‫סוגי‬ ‫על‬ ‫דיברנו‬ ,‫כה‬ ‫עד‬ .‫אליו‬ ‫הרפרנס‬ ‫אלא‬ ,‫עצמו‬ ‫האובייקט‬ ‫לא‬ ‫זה‬ ‫המרה‬ ‫שעובר‬ ‫מה‬ ,‫כן‬ ‫אם‬
.‫אחד‬ ‫ממשתנה‬ ‫ביותר‬ ‫להציב‬ ‫ניתן‬ ‫הרפרנס‬ ‫אותו‬ ‫שאת‬ ‫העובדה‬ ‫את‬ ‫נציין‬ ,‫כעת‬ .‫הרפרנס‬ ‫אותו‬
‫יפנו‬ ,‫כך‬ ‫ובשל‬ ‫הרפרנס‬ ‫אותו‬ ‫את‬ ‫יכילו‬ ,‫זה‬ ‫ערך‬ ‫שיכילו‬ ‫המשתנים‬ ‫כל‬ ,‫זה‬ ‫במקרה‬)=( ‫להשמה‬ ‫בנוגע‬ ‫גם‬ ‫כך‬ ,‫האובייקט‬ ‫לאותו‬
.‫החדש‬ ‫במשתנה‬ ‫כמתבקש‬ ‫יושם‬ ‫הרפרנס‬ ‫רק‬ ,‫שינוי‬ ‫ללא‬ ‫יישאר‬ ‫עצמו‬ ‫האובייקט‬ ,‫שונים‬ ‫מחלקה‬ ‫משתני‬ ‫בין‬
‫ערך‬ ‫תחזיר‬ ‫השוואה‬ .‫אובייקטים‬ ‫בין‬ )==( ‫השוואה‬ ‫על‬ ‫לדבר‬ ‫כן‬ ‫אם‬ ‫ניתן‬ ,‫האופן‬ ‫באותו‬‫אמת‬‫המושווים‬ ‫הרפרנסים‬ ‫אם‬ ‫ורק‬ ‫אך‬ ,
‫התייחסו‬ ‫מבלי‬ ,‫זהים‬‫ערך‬ ‫תחזיר‬ ‫השוואה‬ ,‫כלומר‬ ,‫עצמו‬ ‫לתוכן‬ ‫ת‬‫שקר‬‫בעלי‬ ‫אך‬ ,‫התוכן‬ ‫מבחינת‬ ‫זהים‬ ‫האובייקטים‬ ‫אם‬ ‫גם‬
.‫שונה‬ ‫רפרנס‬
‫מהמחלקה‬ ‫אוטומטי‬ ‫באופן‬ ‫יורשות‬ ‫המחלקות‬ ‫וכל‬ ‫היות‬Object‫ב‬ ‫להשתמש‬ ‫ניתן‬ ,-equals‫בין‬ ‫ההשוואה‬ ‫ביצוע‬ ‫לצורך‬
‫המתודה‬ ‫של‬ ‫הדפולטיבי‬ ‫פעולתה‬ ‫אופן‬ ‫בין‬ ‫הבדל‬ ‫אין‬ .‫אובייקטים‬equals‫בין‬ ‫הבדל‬ ‫יש‬ ‫אך‬ ,== ‫האופרטור‬ ‫של‬ ‫פעולתו‬ ‫לאופי‬
( ‫בג'אווה‬ ‫אופרטורים‬ ‫העמסת‬ ‫לבצע‬ ‫ניתן‬ ‫שלא‬ ‫בכך‬ ‫השניים‬‫ב‬ ‫אופרטורים‬ ‫העמסת‬ ‫לבצע‬ ‫ניתן‬ :‫טיפ‬-Groovy‫שפה‬ ‫שזו‬ ,
‫מבוססת‬JVM‫לג'אווה‬ ‫דומה‬‫של‬ ‫פעולתה‬ ‫אופן‬ ‫את‬ ‫לשנות‬ ‫שניתן‬ ,‫ומכאן‬ ‫מתודות‬ ‫דריסת‬ ‫לבצע‬ ‫ניתן‬ ‫כן‬ ‫אך‬ ,)equals‫כך‬ ,
:‫המחדל‬ ‫ברירת‬ ‫בדרך‬ ‫עושה‬ ‫שהיא‬ ‫כפי‬ ,‫הרפרנס‬ ‫לפי‬ ‫ולא‬ ‫התוכן‬ ‫לפי‬ ‫ההשוואה‬ ‫את‬ ‫שתבצע‬
public boolean equals(Object obj) { /*New logic goes here*/ }
‫ה‬ ‫ברירת‬ ‫ערך‬ ‫את‬ ‫יקבל‬ ‫מחלקה‬ ‫מטיפוס‬ ‫משתנה‬‫מחדל‬null‫בוצע‬ ‫לא‬ ‫באם‬ ,instantiation‫לגבי‬ ‫אינדיקציה‬ ‫זוהי‬ ,‫כלומר‬ ,
‫של‬ ‫הצבה‬ ‫לבצע‬ ‫גם‬ ‫(ניתן‬ ‫אובייקט‬ ‫לאף‬ ‫ברפרנס‬ ‫מחזיק‬ ‫לא‬ ‫זה‬ ‫שמשתנה‬ ‫העובדה‬null‫במשתנה‬ ‫לשימוש‬ ‫ניסיון‬ .)‫יזום‬ ‫באופן‬
‫המכיל‬ ‫מחלקה‬ ‫מסוג‬null.‫ריצה‬ ‫לשגיאת‬ ‫יגרום‬ ,
‫ר‬ ‫מכיל‬ ‫מחלקה‬ ‫מסוג‬ ‫משתנה‬ ‫האם‬ ‫בדיקה‬ ‫לבצע‬ ‫ניתן‬‫הוא‬ ‫האם‬ ‫בדיקה‬ ‫ע"י‬ ‫לא‬ ‫או‬ ‫לאובייקט‬ ‫פרנס‬==null‫או‬!=null

Weitere ähnliche Inhalte

Was ist angesagt?

Type conversions
Type conversionsType conversions
Type conversionssanya6900
 
Constants, Variables and Data Types in Java
Constants, Variables and Data Types in JavaConstants, Variables and Data Types in Java
Constants, Variables and Data Types in JavaAbhilash Nair
 
array of object pointer in c++
array of object pointer in c++array of object pointer in c++
array of object pointer in c++Arpita Patel
 
Java access modifiers
Java access modifiersJava access modifiers
Java access modifiersKhaled Adnan
 
Finalize() method
Finalize() methodFinalize() method
Finalize() methodJadavsejal
 
Access modifiers
Access modifiersAccess modifiers
Access modifiersJadavsejal
 
String classes and its methods.20
String classes and its methods.20String classes and its methods.20
String classes and its methods.20myrajendra
 
Inheritance in c++
Inheritance in c++Inheritance in c++
Inheritance in c++Paumil Patel
 
Constructor in Java - ITVoyagers
Constructor in Java - ITVoyagersConstructor in Java - ITVoyagers
Constructor in Java - ITVoyagersITVoyagers
 
encapsulation, inheritance, overriding, overloading
encapsulation, inheritance, overriding, overloadingencapsulation, inheritance, overriding, overloading
encapsulation, inheritance, overriding, overloadingShivam Singhal
 
Polymorphism In c++
Polymorphism In c++Polymorphism In c++
Polymorphism In c++Vishesh Jha
 
Access Protection
Access ProtectionAccess Protection
Access Protectionmyrajendra
 

Was ist angesagt? (20)

Object and class
Object and classObject and class
Object and class
 
Type conversions
Type conversionsType conversions
Type conversions
 
Constants, Variables and Data Types in Java
Constants, Variables and Data Types in JavaConstants, Variables and Data Types in Java
Constants, Variables and Data Types in Java
 
array of object pointer in c++
array of object pointer in c++array of object pointer in c++
array of object pointer in c++
 
Java access modifiers
Java access modifiersJava access modifiers
Java access modifiers
 
Structures and Unions
Structures and UnionsStructures and Unions
Structures and Unions
 
Class or Object
Class or ObjectClass or Object
Class or Object
 
Finalize() method
Finalize() methodFinalize() method
Finalize() method
 
Access modifiers
Access modifiersAccess modifiers
Access modifiers
 
Inheritance in OOPS
Inheritance in OOPSInheritance in OOPS
Inheritance in OOPS
 
String classes and its methods.20
String classes and its methods.20String classes and its methods.20
String classes and its methods.20
 
Inheritance in c++
Inheritance in c++Inheritance in c++
Inheritance in c++
 
Packages in java
Packages in javaPackages in java
Packages in java
 
Classes and objects
Classes and objectsClasses and objects
Classes and objects
 
Constructor in Java - ITVoyagers
Constructor in Java - ITVoyagersConstructor in Java - ITVoyagers
Constructor in Java - ITVoyagers
 
encapsulation, inheritance, overriding, overloading
encapsulation, inheritance, overriding, overloadingencapsulation, inheritance, overriding, overloading
encapsulation, inheritance, overriding, overloading
 
Inner class
Inner classInner class
Inner class
 
Polymorphism In c++
Polymorphism In c++Polymorphism In c++
Polymorphism In c++
 
Access Protection
Access ProtectionAccess Protection
Access Protection
 
Java inheritance
Java inheritanceJava inheritance
Java inheritance
 

Mehr von מורן אלקובי

ג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותמורן אלקובי
 
ג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהמורן אלקובי
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהמורן אלקובי
 
SQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםSQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםמורן אלקובי
 
SQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםSQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםמורן אלקובי
 
בדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtualבדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtualמורן אלקובי
 
הורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקותהורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקותמורן אלקובי
 
תכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותתכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותמורן אלקובי
 
כלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםכלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםמורן אלקובי
 
עבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סיעבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סימורן אלקובי
 
מצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמורן אלקובי
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מורן אלקובי
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מורן אלקובי
 
מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מורן אלקובי
 

Mehr von מורן אלקובי (20)

ג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיותג'אווה - תכנות מונחה עצמים - רב צורתיות
ג'אווה - תכנות מונחה עצמים - רב צורתיות
 
ג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשהג'אווה - תכנות מונחה עצמים - הורשה
ג'אווה - תכנות מונחה עצמים - הורשה
 
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפהג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
ג'אווה - תכנות מונחה עצמים - מצייני גישה/רמות חשיפה
 
MySQL - מילון השאילתא
MySQL - מילון השאילתאMySQL - מילון השאילתא
MySQL - מילון השאילתא
 
SQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתוניםSQL - שפת הגדרת הנתונים
SQL - שפת הגדרת הנתונים
 
SQL - מודל הנתונים
SQL - מודל הנתוניםSQL - מודל הנתונים
SQL - מודל הנתונים
 
SQL - אלגברה של יחסים
SQL - אלגברה של יחסיםSQL - אלגברה של יחסים
SQL - אלגברה של יחסים
 
SQL - מודל ישויות קשרים
SQL - מודל ישויות קשריםSQL - מודל ישויות קשרים
SQL - מודל ישויות קשרים
 
MySQL - מרכיבי השאילתא
MySQL - מרכיבי השאילתאMySQL - מרכיבי השאילתא
MySQL - מרכיבי השאילתא
 
בדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtualבדרך לפולימורפיזם - Using Virtual/Pure Virtual
בדרך לפולימורפיזם - Using Virtual/Pure Virtual
 
הורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקותהורשה והיררכיה של מחלקות
הורשה והיררכיה של מחלקות
 
תכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקותתכנות מונחה עצמים - מחלקות
תכנות מונחה עצמים - מחלקות
 
טורי חזקה
טורי חזקהטורי חזקה
טורי חזקה
 
כלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטיםכלים מתמטיים - הוכחות משפטים
כלים מתמטיים - הוכחות משפטים
 
DLL מדריך לעבודה עם
DLL מדריך לעבודה עםDLL מדריך לעבודה עם
DLL מדריך לעבודה עם
 
עבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סיעבודה עם קבצים בשפת סי
עבודה עם קבצים בשפת סי
 
מצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשבמצגת בלוגיקה למדעי המחשב
מצגת בלוגיקה למדעי המחשב
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3
 
מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3מצגת לוגיקה מלאה חלק 1 מתוך 3
מצגת לוגיקה מלאה חלק 1 מתוך 3
 

ג'אווה - תכנות מונחה עצמים - משתנים מטיפוס מחלקה והמרת טיפוסים למעלה/למטה

  • 1.
  • 2. ‫משתנ‬‫ים‬‫מחלקה‬ ‫מטיפוס‬-Class type Variables :‫הבאות‬ ‫ההגדרות‬ ‫וקיימות‬ ‫בהנחה‬ public interface InterfaceName {} public class ClassNameA {} public class ClassNameB extends ClassNameA implements InterfaceName {} :‫בלבד‬ ‫טיפוסים‬ ‫משלושה‬ ‫מאחד‬ ‫להיות‬ ‫יכול‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫את‬ ‫להכיל‬ ‫שמיועד‬ ‫המשתנה‬ ‫הראשון‬,‫המחלקה‬ ‫מטיפוס‬:‫הטריוויאלי‬ ‫הטיפוס‬ ‫זהו‬ ,‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫אנו‬ ‫ממנה‬ ClassNameB cnb=new ClassNameB(); ‫השני‬,‫למחלקה‬ ‫שמורישה‬ ‫מחלקה‬ ‫מטיפוס‬‫מטיפ‬ ‫כלומר‬ ,‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫אנו‬ ‫ממנה‬‫ממנה‬ ‫שהמחלקה‬ ‫מחלקה‬ ‫וס‬ .‫הגדרתה‬ ‫את‬ ‫מרחיבה‬ ‫האובייקט‬ ‫את‬ ‫יוצרים‬ ClassNameA cna=new ClassNameB(); ‫השלישי‬,‫המחלקה‬ ‫אותו‬ ‫ממשק‬ ‫מטיפוס‬‫האובייקט‬ ‫את‬ ‫יוצרים‬ ‫ממנה‬‫מיישמת‬. InterfaceName in=new ClassNameB(); ‫(הרפרנס‬ ‫החזרה‬ ‫ערך‬ ‫את‬ ‫שנציב‬ ‫לאחר‬‫(בהתאם‬ ‫שלו‬ ‫למאפיינים‬ ‫לגשת‬ ‫יהיה‬ ‫ניתן‬ ,‫לכך‬ ‫המיועד‬ ‫במשתנה‬ )‫לאובייקט‬ :‫כך‬ ‫לדוגמה‬ ,)‫מתודה‬ ‫או‬ ‫(משתנה‬ ‫המאפיין‬ ‫ושם‬ ‫מפרידה‬ ‫נקודה‬ ,‫המשתנה‬ ‫שם‬ ‫ציון‬ ‫ע"י‬ )‫גישה‬ ‫להרשאות‬ objectName.methodName(); ‫ה‬ ‫ממנו‬ ‫בטיפוס‬ ‫שהוגדרו‬ ‫למאפיינים‬ ‫ורק‬ ‫אך‬ ‫לגשת‬ ‫יכול‬ ‫משתנה‬ ‫של‬ ‫סוג‬ ‫שכל‬ ‫לב‬ ‫לשים‬ ‫יש‬‫אובייקט‬ ‫לאיזה‬ ‫קשר‬ ‫מבלי‬ ‫נוצר‬ ‫וא‬ .‫מחזיק‬ ‫הוא‬
  • 3. .‫האחרונה‬ ‫הדוגמה‬ ‫את‬ ‫מעט‬ ‫נעבה‬ ‫יותר‬ ‫טוב‬ ‫הנושא‬ ‫את‬ ‫להבין‬ ‫מנת‬ ‫על‬ ‫תרשים‬ ‫מתוך‬UML:‫נתון‬ :‫הבאות‬ ‫ההגדרות‬ ‫שקיימות‬ ‫להבין‬ ‫נוכל‬ public interface InterfaceName { public abstract void interfaceMethod(); } public class ClassNameA { int classNameAVar; } public class ClassNameB extends ClassNameA implements InterfaceName { int classNameBVar; public void interfaceMethod () { } } ‫ב‬ ‫וכי‬-Runner.)'‫וכד‬ ‫אובייקטים‬ ‫(יצירת‬ ‫והממשק‬ ‫למחלקות‬ ‫תלות‬ ‫קשרי‬ ‫על‬ ‫המעידים‬ ‫שימושים‬ ‫נעשים‬ ‫לכל‬ ‫גישה‬ ‫שתהיה‬ ‫כך‬ ,‫נוצר‬ ‫הוא‬ ‫ממנה‬ ‫המחלקה‬ ‫מסוג‬ ‫במשתנה‬ ‫נציב‬ ‫אליו‬ ‫הרפרנס‬ ‫שאת‬ ‫אובייקט‬ ‫ויצרנו‬ ‫נניח‬ ,‫כעת‬ :‫במחלקה‬ ‫שהוגדרו‬ ‫המאפיינים‬ ClassNameB cnb=new ClassNameB(); ‫אובייקטים‬ ‫ניצור‬ ‫לא‬ ,‫מכאן‬:‫קודם‬ ‫שהוצגו‬ ‫האפשריים‬ ‫מהסוגים‬ ‫במשתנים‬ ‫שיצרנו‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫את‬ ‫נפיץ‬ ‫אלא‬ ,‫חדשים‬ ClassNameA cna = cnb; InterfaceName in = cnb;
  • 4. ‫מחלקה‬ ‫מסוג‬ ‫אובייקט‬ ‫בידנו‬ ‫יש‬ ,‫זאת‬ ‫משעשינו‬ClassNameB‫שהרפרנס‬‫שהצגנו‬ ‫המשתנים‬ ‫טיפוסי‬ ‫בשלושת‬ ‫מוכל‬ ‫אליו‬ ‫המשתנים‬ ‫שלושת‬ ,‫כלומר‬ ,‫הקודמת‬ ‫בדוגמה‬in, cna, cnb‫מהם‬ ‫אחד‬ ‫כל‬ ‫של‬ ‫הגישה‬ ‫אך‬ ,‫האובייקט‬ ‫לאותו‬ ‫מתייחסים‬ :‫נוצרו‬ ‫הם‬ ‫מהם‬ ‫הטיפוסים‬ ‫מהגדרות‬ ‫אחת‬ ‫בכל‬ ‫הוגדרו‬ ‫מאפיינים‬ ‫לאילו‬ ‫בהתאם‬ ‫תהיה‬ ‫האובייקט‬ ‫של‬ ‫למאפיינים‬ ‫המשתנה‬in‫המתודה‬ ‫את‬ ‫רק‬ "‫"לראות‬ ‫יכול‬interfaceMethod()‫מהטיפוס‬ ‫שמגיעה‬ ‫היחידה‬ ‫והיא‬ ‫היות‬InterfaceName :‫נוצר‬ ‫הוא‬ ‫ממנו‬ in.interfaceMethod(); ‫המשתנה‬cna‫המשתנה‬ ‫את‬ ‫רק‬ "‫"לראות‬ ‫יכול‬classNameAVar‫מהטיפוס‬ ‫שמגיע‬ ‫היחיד‬ ‫והוא‬ ‫היות‬ClassNameA‫הוא‬ ‫ממנו‬ :‫נוצר‬ cna.classNameAVar=0; ‫המשתנה‬cnb‫המשתנה‬ ‫את‬ "‫"לראות‬ ‫יכול‬classNameBVar‫במחלקה‬ ‫מוגדר‬ ‫והוא‬ ‫היות‬ClassNameB,‫נוצר‬ ‫הוא‬ ‫ממנה‬ ‫המשתנה‬ ‫את‬ "‫"לראות‬ ‫יכול‬ ‫הוא‬ ,‫כן‬ ‫כמו‬classNameAVar‫מהמחלקה‬ ‫יורש‬ ‫והוא‬ ‫היות‬ClassNameA, ‫המתודה‬ ‫את‬ "‫"לראות‬ ‫יכול‬ ‫והוא‬interfaceMethod()‫הממשק‬ ‫את‬ ‫מממש‬ ‫והוא‬ ‫היות‬InterfaceName: cnb.interfaceMethod(); cnb.classNameAVar=0; cnb.classNameBVar=0; ‫האפשריים‬ ‫המשתנים‬ ‫מטיפוסי‬ ‫אחד‬ ‫בכל‬ ‫לאובייקט‬ ‫הרפרנס‬ ‫להצבת‬ ‫סיבות‬ ‫מעט‬ ‫לא‬ ‫יש‬‫שעומדת‬ ‫ללוגיקה‬ ‫בהתאם‬ ‫המשתנות‬ ‫לחלק‬ ‫הגישה‬ ‫את‬ "‫"להסתיר‬ ‫היכולת‬ ‫הוא‬ ‫המתקבלים‬ ‫המידיים‬ ‫היתרונות‬ ‫אחד‬ ,‫לראות‬ ‫שניתן‬ ‫כפי‬ ‫אך‬ ,‫התכנית‬ ‫כתיבת‬ ‫מאחורי‬ .‫אליו‬ ‫הרפרנס‬ ‫את‬ ‫המכיל‬ ‫המשתנה‬ ‫לסוג‬ ‫בהתאם‬ ,‫אובייקט‬ ‫של‬ ‫מהמאפיינים‬ ‫בתפ‬ ‫גרסה‬ ‫להפיץ‬ ‫ומעוניינת‬ ‫תוכנה‬ ‫המפתחת‬ ‫לחברה‬ ‫זאת‬ ‫לדמות‬ ‫ניתן‬‫הקהל‬ ‫בקרב‬ ‫מודעות‬ ‫לעורר‬ ‫ע"מ‬ ,‫בחינם‬ ,‫רחבה‬ ‫וצה‬ ‫וכבר‬ ‫היות‬ ‫המוצר‬ ‫את‬ ‫לקנות‬ ‫יחליטו‬ ‫אנשים‬ ‫מאוד‬ ‫שמעט‬ ‫הרי‬ ,‫מלאה‬ ‫גרסה‬ ‫תהה‬ ‫שתופץ‬ ‫הגרסה‬ ‫אם‬ .‫שפיתחה‬ ‫המוצר‬ ‫לגבי‬ ‫ממנה‬ ‫שהוסרו‬ ,‫שלה‬ ‫הביצועים‬ ‫מבחינת‬ ‫שמוגבלת‬ ‫גרסה‬ ‫החברה‬ ‫מפיצה‬ ,‫כן‬ ‫ועל‬ ‫מלאה‬ ‫בצורה‬ ‫מתפקד‬ ,‫ביד‬ ‫אותו‬ ‫להם‬ ‫יש‬ ‫מסו‬ ‫פיצ'רים‬‫לראות‬ ‫ניתן‬ ‫שדרכה‬ ‫גרסה‬ ‫מקבל‬ ,‫הניסיון‬ ‫לגרסת‬ ‫שנחשף‬ ‫אדם‬ ‫אותו‬ .‫בה‬ ‫השימוש‬ ‫זמן‬ ‫שהוגבל‬ ‫או‬ ‫ימים‬ ‫את‬ ‫ורק‬ ‫אך‬ ‫חושף‬ ‫ממשק‬ ‫מסוג‬ ‫משתנה‬ ‫שאותו‬ ‫כשם‬ ‫בדיוק‬ ,‫המפתחים‬ ‫בידי‬ ‫שנחשפו‬ ‫פיצ'רים‬ ‫באותם‬ ‫ורק‬ ‫אך‬ ‫ולהשתמש‬ ‫וירשה‬ ‫אותו‬ ‫שמימשה‬ ‫זו‬ ,‫המשוכללת‬ ‫המחלקה‬ ‫של‬ ‫אלו‬ ‫את‬ ‫ולא‬ ‫בו‬ ‫שמוגדרים‬ ‫הפיצ'רים‬‫שלנו‬ ‫בדוגמה‬ ‫אחרת‬ ‫ממחלקה‬ .)‫המלאה‬ ‫התוכנה‬ ‫גרסת‬ :‫(ובהקבלה‬ ‫העוסק‬ ‫בפרק‬ ‫הנושא‬ ‫על‬ ‫נדבר‬ ‫אנו‬ ,‫ובנוסף‬ )‫(קיבוץ‬ ‫הדרך‬ ‫באותה‬ ‫שונים‬ ‫מסוגים‬ ‫לאובייקטים‬ ‫לפנות‬ ‫היכולת‬ ‫הוא‬ ‫נוסף‬ ‫יתרון‬ .‫בפולימורפיזם‬ .‫אוטומטית‬ ‫טיפוסים‬ ‫בהמרת‬ ‫מודע‬ ‫לא‬ ‫שימוש‬ ‫נעשה‬ ‫שראינו‬ ‫בדוגמאות‬
  • 5. ‫למעלה/למטה‬ ‫טיפוסים‬ ‫המרת‬-Up/Down Type Casting ‫תוך‬ ‫מורכבות‬ ‫משימות‬ ‫לביצוע‬ ‫ישיר‬ ‫תרגום‬ ‫מקבלת‬ ‫זו‬ ‫יכולת‬ .‫ג'אווה‬ ‫בשפת‬ ‫מאוד‬ ‫חשוב‬ ‫נדבך‬ ‫היא‬ ‫קאסטינג‬ ‫לבצע‬ ‫היכולת‬ .‫כה‬ ‫עד‬ ‫שהכרנו‬ ‫פרימיטיביים‬ ‫טיפוסים‬ ‫בין‬ ‫ההמרות‬ ‫מאותן‬ ‫במהותו‬ ‫נבדל‬ ‫זה‬ ‫קאסטינג‬ .‫פשוט‬ ‫בתחביר‬ ‫שימוש‬ ‫טיפוסי‬ ‫בהמרת‬‫המרה‬ .‫מורישה‬ ‫ממחלקה‬ ‫אובייקט‬ ‫כאל‬ ‫יורשת‬ ‫ממחלקה‬ ‫לאובייקט‬ ‫להתייחס‬ ‫היכולת‬ ‫על‬ ‫מדובר‬ ,‫למעלה‬ ‫ם‬ ‫בכל‬ ‫מתבצעת‬ ‫והיא‬ ‫היות‬ ‫ממשי‬ ‫טכני‬ ‫צורך‬ ‫בכך‬ ‫אין‬ ,‫הבהירות‬ ‫לשם‬ ‫רק‬ ‫זאת‬ ‫אך‬ ,‫מפורשת‬ ‫בצורה‬ ‫להתבצע‬ ‫יכולה‬ ‫זה‬ ‫מסוג‬ ‫אוטומטי‬ ‫באופן‬ ‫מקרה‬–‫תמיד‬ ‫ומצליחה‬ ‫כבטוחה‬ ‫נחשבת‬ ‫זו‬ ‫שהמרה‬ ‫כך‬ ‫מתוך‬ ‫זאת‬.‫בעיות‬ ‫מבלי‬ ‫היות‬ ‫שמבצעים‬ ‫ההמרה‬ ‫לסוג‬ ‫לב‬ ‫תשומת‬ ‫מתן‬ ‫תוך‬ ,‫אז‬ ‫וגם‬ ‫מפורש‬ ‫ידני‬ ‫באופן‬ ‫להתבצע‬ ‫צריכה‬ ,‫זאת‬ ‫לעומת‬ ‫למטה‬ ‫המרה‬ .‫מבוקר‬ ‫לא‬ ‫באופן‬ ‫בוצעה‬ ‫באם‬ ‫ריצה‬ ‫ושגיאות‬ ‫קומפילציה‬ ‫שגיאות‬ ‫לגרור‬ ‫ועלולה‬ ‫טריוויאלית‬ ‫פחות‬ ‫זו‬ ‫והמרה‬ ‫בתרש‬ ‫ראשית‬ ‫נביט‬ ,‫הנושא‬ ‫את‬ ‫יותר‬ ‫טוב‬ ‫להבין‬ ‫מנת‬ ‫על‬‫ה‬ ‫ים‬-UML:‫הנתון‬ :‫הבאות‬ ‫ההגדרות‬ ‫שקיימות‬ ‫להבין‬ ‫נוכל‬ ‫מתוכו‬ public class Human { String type="Human"; } public class Person extends Human { } public class Student extends Person { } public class Soldier extends Person { } ‫וכי‬‫ב‬-Runner‫נעשים‬‫שימושים‬‫המעידים‬‫על‬‫קשרי‬‫תלות‬‫למחלקות‬(‫יצירת‬‫אובייקטים‬‫וכד‬.)'
  • 6. ‫אדם‬ ‫מבן‬ ‫יורשים‬ ‫וחייל‬ ‫שסטודנט‬ ‫לראות‬ ‫בקלות‬ ‫ניתן‬ .‫אנוש‬ ‫בן‬ ‫של‬ ‫המחלקות‬ ‫היררכיית‬ ‫של‬ ‫מצומצמת‬ ‫גרסה‬ ‫מתאר‬ ‫התרשים‬ ‫מלבד‬ ,‫בג'אווה‬ ‫שהרי‬ ,‫מאובייקט‬ ‫יורש‬ ‫אנוש‬ ‫בן‬ ‫כי‬ ‫נציין‬ ,‫כן‬ ‫כמו‬ .‫אנוש‬ ‫מבן‬ ‫יורש‬ ‫אדם‬ ‫בן‬ ‫וכי‬‫כל‬ ,‫פרימיטיביים‬ ‫טיפוסים‬ .‫אוטומטי‬ ‫באופן‬ ‫מאובייקט‬ ‫יורשים‬ ‫הטיפוסים‬ ‫בהגדרת‬ ‫נביט‬Runner: public class Runner { public static void main(String[] args) { Student student = new Student(); System.out.println(student.type); Soldier soldier = new Soldier(); System.out.println(soldier.type); } } ‫בהרצת‬ ‫שיתקבל‬ ‫הפלט‬Runner‫את‬ ‫יורשים‬ ‫ושניהם‬ ‫היות‬ ,‫האובייקטים‬ ‫שני‬ ‫עבור‬ ‫זהה‬ ‫כמובן‬ ‫יהיה‬type‫מ‬-Human. ‫למעלה‬ ‫המרה‬)‫אוטומטי‬ ‫באופן‬ ‫מתבצעת‬ ,‫(כאמור‬ public class Runner { public static void main(String[] args) { Student student = new Student(); System.out.println(student.type); Soldier soldier = new Soldier(); System.out.println(soldier.type); Student s = new Student(); System.out.println(s); Person p = s; // Person p = (Person)s; - ‫אוטומטית‬ ‫למעלה‬ ‫המרה‬–‫ל‬ ‫שקולה‬ System.out.println(p); /* ‫מה‬‫שיודפס‬ Human Human Student@32e0c07c Student@32e0c07c */ } } ‫שסטודנט‬ ‫היא‬ ‫בעיות‬ ‫בלי‬ ‫תמיד‬ ‫תתבצע‬ ‫כזו‬ ‫שהמרה‬ ‫הסיבה‬ ,‫אדם‬ ‫לבן‬ ‫מסטודנט‬ ‫בוצעה‬ ‫למעלה‬ ‫שהמרה‬ ‫לראות‬ ‫ניתן‬ ‫בדוגמה‬ ,‫כן‬ ‫כמו‬ ,‫אדם‬ ‫בן‬ ‫אכן‬ ‫הוא‬‫ה‬ ‫מדיאגרמת‬ ‫ללמוד‬ ‫ניתן‬ ‫זאת‬ ‫כל‬ ,‫אובייקט‬ ‫הוא‬ ‫סטודנט‬ ‫כן‬ ‫וכמו‬ ‫אנוש‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬-UML .‫הירושה‬ ‫היררכיית‬ ‫את‬ ‫המתארת‬ ‫משתנה‬ ‫ע"י‬ ‫שמוחזק‬ ‫וסטודנט‬ ‫סטודנט‬ ‫מסוג‬ ‫משתנה‬ ‫ע"י‬ ‫שמוחזק‬ ‫שסטודנט‬ ‫הוא‬ ,‫בדוגמה‬ ‫אליו‬ ‫לב‬ ‫לשים‬ ‫שחשוב‬ ‫נוסף‬ ‫דבר‬ ‫הד‬ ‫כך‬ ‫במקרה‬ ‫לא‬ .‫האופן‬ ‫באותו‬ ‫מודפסים‬ ‫אדם‬ ‫בן‬ ‫מסוג‬‫בר‬-.‫עצמו‬ ‫האובייקט‬ ‫על‬ ‫השפעה‬ ‫אין‬ ‫באובייקט‬ ‫שמחזיק‬ ‫למשתנה‬ ‫המשתנה‬ ‫דרך‬ ,‫ובדוגמה‬ ,‫שונה‬ ‫בצורה‬ ‫לאובייקט‬ ‫להתייחס‬ ‫ניתן‬ ‫יהיה‬ ‫לפיה‬ ‫תווית‬ ‫כמעיין‬ ‫משמש‬ ‫המשתנה‬p,‫אדם‬ ‫בן‬ ‫מסוג‬ ‫לאובייקט‬ ‫ברפרנס‬ ‫המחזיק‬s‫שבנאד‬ ‫או‬ ‫אדם‬ ‫בבן‬ ‫שהוגדרו‬ ‫ומתודות‬ ‫למשתנים‬ ‫ורק‬ ‫אך‬ ‫לפנות‬ ‫נוכל‬ ,‫סטודנט‬ ‫מסוג‬‫ירש‬ ‫ם‬ ‫שהפנייה‬ ‫עוד‬ ‫כל‬ ‫יוסתרו‬ ,‫לסטודנט‬ ,‫בנאדם‬ ‫של‬ ‫ובמקרה‬ ‫הירושה‬ ‫בהיררכיית‬ ‫שמתחת‬ ‫למה‬ ‫ששייכים‬ ‫השדות‬ ,‫מלמעלה‬ ‫למטה‬ ‫ידנית‬ ‫המרה‬ ‫שתיעשה‬ ‫שברגע‬ ‫לציין‬ ‫חשוב‬ .‫שמומש‬ ‫מממשק‬ ‫או‬ ‫מורישה‬ ‫ממחלקה‬ ,"‫"מלמעלה‬ ‫תיעשה‬ ‫לאובייקט‬ ‫חסו‬ ‫שהיו‬ ‫המאפיינים‬ ‫כל‬ ‫גם‬ ‫יחזרו‬ ,‫סטודנט‬ ‫מטיפוס‬ ‫למשתנה‬ ‫בחזרה‬.‫כה‬ ‫כד‬ ‫מים‬
  • 7. ‫למטה‬ ‫המרה‬)‫ידני‬ ‫באופן‬ ‫מתבצעת‬ ,‫(כאמור‬ ‫אנחנו‬ ‫האם‬ ‫עצמנו‬ ‫את‬ ‫לשאול‬ ‫עלינו‬ ‫למטה‬ ‫קאסטינג‬ ‫עושים‬ ‫כשאנחנו‬ .‫מבוקרת‬ ‫בצורה‬ ‫להיעשות‬ ‫צריכה‬ ‫למטה‬ ‫ההמרה‬ .‫האובייקט‬ ‫של‬ ‫המהות‬ ‫למקור‬ ‫בהתאם‬ ‫לא‬ ‫או‬ ‫חוקית‬ ‫המרה‬ ‫מבצעים‬ ,‫שהבאנו‬ ‫בדוגמה‬p‫ברפרנס‬ ‫החזיק‬.‫וחוקית‬ ‫אפשרית‬ ‫סטודנט‬ ‫לטיפוס‬ ‫בחזרה‬ ‫למטה‬ ‫המרה‬ ‫ולכן‬ ‫סטודנט‬ ‫מסוג‬ ‫לאובייקט‬ Student s1 = new Student(); System.out.println(s1); Person p = s1; // Person p = (Person)s1; - ‫אוטומטית‬ ‫למעלה‬ ‫המרה‬–‫ל‬ ‫שקולה‬ System.out.println(p); Student s2=(Student)p; // ‫המרה‬‫מלכתחילה‬ ‫שלו‬ ‫שהיו‬ ‫התכונות‬ ‫את‬ ‫לסטודנט‬ ‫ומחזירים‬ ‫היות‬ ‫תקינה‬ ‫למטה‬ ‫ידנית‬ ( ‫ריצה‬ ‫שגיאת‬ ‫תניב‬ ,‫חייל‬ ‫מסוג‬ ‫לטיפוס‬ ‫למטה‬ ‫להמיר‬ ‫ניסיון‬ClassCastException‫זאת‬ ,‫קומפילציה‬ ‫מבחינת‬ ‫תתאפשר‬ ‫אך‬ ,) ‫ומ‬ ‫היות‬-p‫מבחינת‬ ‫שמתחתיו‬ ‫לאובייקט‬ ‫ברפרנס‬ ‫שהחזיק‬ ‫משתנה‬ ‫רק‬ ‫היה‬ ‫זה‬ ,‫אובייקט‬ ‫נוצר‬ ‫לא‬,‫מחלקתית‬ ‫היררכיה‬ ‫המתכנת‬ ,‫המתכנת‬ ‫בידי‬ ‫היא‬ ‫לחוקיות‬ ‫האחריות‬ ,‫כן‬ ‫ועל‬ ,)‫אדם‬ ‫בבן‬ ‫(או‬ ‫בחייל‬ ‫או‬ ‫בסטודנט‬ ‫או‬ ‫להחזיק‬ ‫יכול‬ ‫הוא‬ ‫תיאורטית‬ :‫מדובר‬ ‫בפועל‬ ‫אובייקט‬ ‫באיזה‬ ‫לדעת‬ ‫שצריך‬ ‫זה‬ ‫הוא‬ Soldier sol=new Soldier(); sol=(Soldier)p; ‫במי‬ ‫להשתמש‬ ‫ניתן‬ ,‫האובייקט‬ ‫מקור‬ ‫מה‬ ‫לדעת‬ ‫ע"מ‬‫האופרטור‬ ,‫השמורה‬ ‫לה‬instanceof:‫הבא‬ ‫באופן‬ Student s3 = new Student(); Human h = s3; //‫למעלה‬ ‫המרה‬ if(h instanceof Student) { //‫בדיקה‬ Student s4 = (Student)h; //‫תקינה‬ ‫למטה‬ ‫המרה‬ } ‫אם‬‫מאיזה‬ ‫בוודאות‬ ‫שידוע‬ ,‫אובייקט‬ ‫ממנו‬ ‫נוצר‬ ‫שכן‬ ‫טיפוס‬ ‫של‬ ‫למטה‬ ‫בהמרה‬ ‫מדובר‬‫לטיפוס‬ ‫ממנו‬ ‫להמיר‬ ‫וננסה‬ ‫הוא‬ ‫טיפוס‬ ( ‫ריצה‬ ‫שגיאת‬ ‫נקבל‬ ,‫אחר‬ClassCastException:)‫אדם‬ ‫בן‬ ‫הוא‬ ‫(סטודנט‬ ‫סטודנט‬ ‫לא‬ ‫הוא‬ ‫אדם‬ ‫שבן‬ ‫ברור‬ ‫הבאה‬ ‫בדוגמה‬ ,) Person per=new Person(); Student s5=(Student)per; ,‫וממי‬ ‫למי‬ ‫להמיר‬ ‫ניתן‬ ‫מי‬ ‫את‬ ‫ההחלטה‬ ‫את‬ ‫לפשט‬ ‫מנת‬ ‫על‬‫היא‬ ‫להישאל‬ ‫שצריכה‬ ‫השאלה‬"?‫האובייקט‬ ‫מקור‬ ‫"מה‬ .‫אנוש‬ ‫לבן‬ ‫אותו‬ ‫להמיר‬ ‫ניתן‬ ,‫אנוש‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬ ‫אם‬ .‫אדם‬ ‫לבן‬ ‫אותו‬ ‫להמיר‬ ‫ניתן‬ ,‫אדם‬ ‫בן‬ ‫הוא‬ ‫סטודנט‬ ‫אם‬ .‫אותם‬ ‫להמיר‬ ‫ניתן‬ ‫לא‬ ‫ולכן‬ ‫לא‬ ?‫אדם‬ ‫בן‬ ‫הוא‬ ‫אנוש‬ ‫בן‬ ‫האם‬ ?‫חייל‬ ‫הוא‬ ‫אנוש‬ ‫בן‬ ‫האם‬ ,‫משמע‬ ?‫אדם‬ ‫כבן‬ ‫הזה‬ ‫לסטודנט‬ ‫מתייחס‬ ‫אני‬ ‫האם‬‫מה‬ ‫כל‬ ‫על‬ ‫איתו‬ "‫"לדבר‬ ‫ואז‬ ‫סטודנט‬ ‫כאל‬ ‫גם‬ ‫אליו‬ ‫להתייחס‬ ‫יכול‬ ‫אני‬ ‫על‬ ‫רק‬ ‫אלא‬ ,‫סטודנט‬ ‫כאל‬ ‫אליו‬ ‫לדבר‬ ‫יכול‬ ‫לא‬ ‫אני‬ ,‫אדם‬ ‫בן‬ ‫כאל‬ ‫אליו‬ ‫מתייחס‬ ‫שאני‬ ‫עוד‬ ‫כל‬ ‫אך‬ ,‫סטודנט‬ ‫עם‬ ‫לדבר‬ ‫שאפשר‬ .‫אדם‬ ‫לבני‬ ‫שכלליים‬ ‫דברים‬
  • 8. ‫היכו‬ ‫הוא‬ ,‫ג'אווה‬ ‫בשפת‬ ‫הטיפוסים‬ ‫המרת‬ ‫של‬ ‫הבולטים‬ ‫היתרונות‬ ‫אחד‬‫שונים‬ ‫סוגים‬ ‫לקבל‬ ‫שיכולות‬ ‫כלליות‬ ‫מתודות‬ ‫לייצר‬ ‫לת‬ ‫אנוש‬ ‫בני‬ ‫וגם‬ ‫אדם‬ ‫בני‬ ‫גם‬ ,‫סטודנטים‬ ‫גם‬ ,‫חיילים‬ ‫גם‬ ‫לקבל‬ ‫שתדע‬ ‫מתודה‬ ‫לייצר‬ ‫וברצוננו‬ ‫נניח‬ .‫כארגומנט‬ ‫אובייקטים‬ ‫של‬ :‫הבאה‬ ‫בהגדרה‬ ‫נביט‬ .‫גנרית‬ ‫בצורה‬ public void whois(Human h) { System.out.println("This is a "+h); } ‫של‬ ‫ההיררכיה‬ ‫במורד‬ ‫או‬ ‫שברמת‬ ‫מהמחלקות‬ ‫אחד‬ ‫לכל‬ ‫רפרנסים‬ ‫זו‬ ‫למתודה‬ ‫לשלוח‬ ‫נוכל‬ ,‫זה‬ ‫באופן‬Human: whois(new Student()); whois(new Person()); whois(new Human()); :‫כזה‬ ‫פלט‬ ‫ונקבל‬ This is a Student@603a3e21 This is a Person@fc519e2 This is a Human@55264c84 ‫את‬ ‫להציב‬ ‫ניתן‬ ‫בהם‬ ‫המשתנים‬ ‫סוגי‬ ‫על‬ ‫דיברנו‬ ,‫כה‬ ‫עד‬ .‫אליו‬ ‫הרפרנס‬ ‫אלא‬ ,‫עצמו‬ ‫האובייקט‬ ‫לא‬ ‫זה‬ ‫המרה‬ ‫שעובר‬ ‫מה‬ ,‫כן‬ ‫אם‬ .‫אחד‬ ‫ממשתנה‬ ‫ביותר‬ ‫להציב‬ ‫ניתן‬ ‫הרפרנס‬ ‫אותו‬ ‫שאת‬ ‫העובדה‬ ‫את‬ ‫נציין‬ ,‫כעת‬ .‫הרפרנס‬ ‫אותו‬ ‫יפנו‬ ,‫כך‬ ‫ובשל‬ ‫הרפרנס‬ ‫אותו‬ ‫את‬ ‫יכילו‬ ,‫זה‬ ‫ערך‬ ‫שיכילו‬ ‫המשתנים‬ ‫כל‬ ,‫זה‬ ‫במקרה‬)=( ‫להשמה‬ ‫בנוגע‬ ‫גם‬ ‫כך‬ ,‫האובייקט‬ ‫לאותו‬ .‫החדש‬ ‫במשתנה‬ ‫כמתבקש‬ ‫יושם‬ ‫הרפרנס‬ ‫רק‬ ,‫שינוי‬ ‫ללא‬ ‫יישאר‬ ‫עצמו‬ ‫האובייקט‬ ,‫שונים‬ ‫מחלקה‬ ‫משתני‬ ‫בין‬ ‫ערך‬ ‫תחזיר‬ ‫השוואה‬ .‫אובייקטים‬ ‫בין‬ )==( ‫השוואה‬ ‫על‬ ‫לדבר‬ ‫כן‬ ‫אם‬ ‫ניתן‬ ,‫האופן‬ ‫באותו‬‫אמת‬‫המושווים‬ ‫הרפרנסים‬ ‫אם‬ ‫ורק‬ ‫אך‬ , ‫התייחסו‬ ‫מבלי‬ ,‫זהים‬‫ערך‬ ‫תחזיר‬ ‫השוואה‬ ,‫כלומר‬ ,‫עצמו‬ ‫לתוכן‬ ‫ת‬‫שקר‬‫בעלי‬ ‫אך‬ ,‫התוכן‬ ‫מבחינת‬ ‫זהים‬ ‫האובייקטים‬ ‫אם‬ ‫גם‬ .‫שונה‬ ‫רפרנס‬ ‫מהמחלקה‬ ‫אוטומטי‬ ‫באופן‬ ‫יורשות‬ ‫המחלקות‬ ‫וכל‬ ‫היות‬Object‫ב‬ ‫להשתמש‬ ‫ניתן‬ ,-equals‫בין‬ ‫ההשוואה‬ ‫ביצוע‬ ‫לצורך‬ ‫המתודה‬ ‫של‬ ‫הדפולטיבי‬ ‫פעולתה‬ ‫אופן‬ ‫בין‬ ‫הבדל‬ ‫אין‬ .‫אובייקטים‬equals‫בין‬ ‫הבדל‬ ‫יש‬ ‫אך‬ ,== ‫האופרטור‬ ‫של‬ ‫פעולתו‬ ‫לאופי‬ ( ‫בג'אווה‬ ‫אופרטורים‬ ‫העמסת‬ ‫לבצע‬ ‫ניתן‬ ‫שלא‬ ‫בכך‬ ‫השניים‬‫ב‬ ‫אופרטורים‬ ‫העמסת‬ ‫לבצע‬ ‫ניתן‬ :‫טיפ‬-Groovy‫שפה‬ ‫שזו‬ , ‫מבוססת‬JVM‫לג'אווה‬ ‫דומה‬‫של‬ ‫פעולתה‬ ‫אופן‬ ‫את‬ ‫לשנות‬ ‫שניתן‬ ,‫ומכאן‬ ‫מתודות‬ ‫דריסת‬ ‫לבצע‬ ‫ניתן‬ ‫כן‬ ‫אך‬ ,)equals‫כך‬ , :‫המחדל‬ ‫ברירת‬ ‫בדרך‬ ‫עושה‬ ‫שהיא‬ ‫כפי‬ ,‫הרפרנס‬ ‫לפי‬ ‫ולא‬ ‫התוכן‬ ‫לפי‬ ‫ההשוואה‬ ‫את‬ ‫שתבצע‬ public boolean equals(Object obj) { /*New logic goes here*/ } ‫ה‬ ‫ברירת‬ ‫ערך‬ ‫את‬ ‫יקבל‬ ‫מחלקה‬ ‫מטיפוס‬ ‫משתנה‬‫מחדל‬null‫בוצע‬ ‫לא‬ ‫באם‬ ,instantiation‫לגבי‬ ‫אינדיקציה‬ ‫זוהי‬ ,‫כלומר‬ , ‫של‬ ‫הצבה‬ ‫לבצע‬ ‫גם‬ ‫(ניתן‬ ‫אובייקט‬ ‫לאף‬ ‫ברפרנס‬ ‫מחזיק‬ ‫לא‬ ‫זה‬ ‫שמשתנה‬ ‫העובדה‬null‫במשתנה‬ ‫לשימוש‬ ‫ניסיון‬ .)‫יזום‬ ‫באופן‬ ‫המכיל‬ ‫מחלקה‬ ‫מסוג‬null.‫ריצה‬ ‫לשגיאת‬ ‫יגרום‬ , ‫ר‬ ‫מכיל‬ ‫מחלקה‬ ‫מסוג‬ ‫משתנה‬ ‫האם‬ ‫בדיקה‬ ‫לבצע‬ ‫ניתן‬‫הוא‬ ‫האם‬ ‫בדיקה‬ ‫ע"י‬ ‫לא‬ ‫או‬ ‫לאובייקט‬ ‫פרנס‬==null‫או‬!=null