לגרף הטיפוסים בג'אווה יש שורש: טיפוס שכל הטיפוסים האחרים הם סוגים שלו. הטיפוס הזה הוא מחלקה בשם Object
.
מזהה שהטיפוס שלו הוא Object
יכול לאחסן כל התייחסות
בתוכנית ג'אווה. כמובן שהמידע על הטיפוס הדינמי של התייחסות כזו הוא למעשה
מידע ריק: הטיפוס הדינמי יכול להיות כל דבר. הטיפוס הסטאטי Object
אינו מעניק לקומפיילר שום מידע חלקי אודות הטיפוס הדינמי.
הדבר העיקרי המועיל שאפשר לעשות על מזהה כזה הוא לצקת אותו למזהה עם טיפוס סטאטי ספיציפי יותר, שיאפשר לנו לבצע פעולות שמותרות על אותו טיפוס ספיציפי.
האופרטור instanceof
של שפת ג'אווה מאפשר לנו לדעת האם הטיפוס הדינמי של ביטוי מסויים הוא סוג-של טיפוס T
עבור איזשהו טיפוס T
. האופרטור הזה מחזיר ערך בוליאני. אם האופרטור מחזיר ערך אמת, אזי מובטח לנו שיציקה של הביטוי לטיפוס T
תצליח.
האופרטור הזה מאפשר לממש שירותים שמסוגלים לקבל ארגומנט ממספר טיפוסים שונים (או אפילו מכל טיפוס שהוא, כלומר מטיפוס Object
),
ולטפל בהם על פי הטיפוס הדינמי שלהם. שירותים כאלה נקראים שירותים
פולימורפיים (polymorphic, רב צורתיים). יש בג'אווה דרכים טובות יותר לממש
שירותים פולימורפיים מאשר להשתמש ב-instanceof
, אבל אפשר לממש אותם גם כך.
האופרטור instanceof
, כמו גם העובדה שיציקה נכשלת בזמן
ריצה אם הטיפוס הנוצק אינו סוג של טיפוס היעד, מלמדים שג'אווה יודעת מהו
הטיפוס המדוייק של כל עצם בזיכרון. זו יכולת מועילה למדי (אם כי יש לה
כמובן עלות בזמן ריצה וזיכרון). יש שפות שבהן המידע הזה אינו זמין בזמן
שהתוכנית רצה.