רמת קושי: בינוני חזה את הפלט של תוכניות Java הבאות. תוכנית 1: Java public class Calculator { int num = 100; public void calc(int num) { this.num = num * 10; } public void printNum() { System.out.println(num); } public static void main(String[] args) { Calculator obj = new Calculator(); obj.calc(2); obj.printNum(); } } אפשרויות: א) 20 ב) 100 ג) 1000 ד) 2 תשובה: א) 20 הסבר: כאן משתנה המופע של המחלקה שם (num) זהה לזה calc() שיטה שם משתנה מקומי (num). אז להתייחסות למשתנה מופע מחלקה מ calc() שִׁיטָה זֶה נעשה שימוש במילת מפתח. אז בהצהרה this.num = num * 10 ב מייצג משתנה מקומי של השיטה שערכו הוא 2 ו זה.num מייצג משתנה מופע מחלקה שהערך ההתחלתי שלו הוא 100. עכשיו ב printNum() מתודה מכיוון שאין לה משתנה מקומי ששמו זהה למשתנה מופע המחלקה כך שנוכל להשתמש ישירות ב להתייחס למשתנה מופע למרות זה.num ניתן להשתמש. תוכנית 2: Java public class MyStuff { String name; MyStuff(String n) { name = n; } public static void main(String[] args) { MyStuff m1 = new MyStuff('guitar'); MyStuff m2 = new MyStuff('tv'); System.out.println(m2.equals(m1)); } @Override public boolean equals(Object obj) { MyStuff m = (MyStuff) obj; if (m.name != null) { return true; } return false; } } אפשרויות: א) הפלט נכון ו-MyStuff ממלא את החוזה Object.equals() . ב) הפלט הוא שקר ו-MyStuff ממלא את החוזה Object.equals() . ג) הפלט נכון ו-MyStuff לא ממלא את החוזה Object.equals() . ד) הפלט הוא שקר ו-MyStuff לא ממלא את החוזה Object.equals(). תשובה: ג) הפלט נכון ו-MyStuff לא ממלא את החוזה Object.equals() . הסבר: כְּמוֹ שווה (Object obj) שיטה במחלקת Object משווה שני אובייקטים על בסיס יחס שקילות. אבל כאן אנחנו רק מאשרים שהאובייקט ריק או לא אז הוא לא מתקיים Object.equals() חוֹזֶה. כְּמוֹ m1 הוא לא null true יודפס. תוכנית 3: Java class Alpha { public String type = 'a '; public Alpha() { System.out.print('alpha '); } } public class Beta extends Alpha { public Beta() { System.out.print('beta '); } void go() { type = 'b '; System.out.print(this.type + super.type); } public static void main(String[] args) { new Beta().go(); } } אפשרויות: א) אלפא בטא ב ב ב) אלפא בטא א ב ג) בטא אלפא ב ב ד) בטא אלפא א ב תשובה: א) אלפא בטא ב ב הסבר: ההצהרה new Beta().go() מבוצע בשני שלבים. בשלב ראשון בטא בנאי המחלקה נקרא. אין חבר מופע נוכח בו בטא מַחלָקָה. אז עכשיו בטא בנאי המחלקה מבוצע. כְּמוֹ בטא הכיתה מתארכת אלפא כיתה אז השיחה עוברת אלפא בנאי המחלקה כמשפט ראשון כברירת מחדל (הצבה על ידי המהדר) הוא סוּפֶּר() ב- בטא בנאי מחלקה. עכשיו בתור משתנה מופע אחד( סוּג ) קיים ב אלפא כיתה כדי שזה יקבל זיכרון ועכשיו אלפא מבוצע בנאי המחלקה ואז תקרא לחזור אל בטא ה-class constructor ההצהרה הבאה. כָּך אלפא בטא מודפס. בשלב שני לָלֶכֶת() שיטה נקראת על אובייקט זה. מכיוון שיש רק משתנה אחד( סוּג ) באובייקט שהערך שלו א . אז זה ישתנה ל ב והודפס פעמיים. ה מילת מפתח סופר כאן אין שום תועלת. תוכנית 4: Java public class Test { public static void main(String[] args) { StringBuilder s1 = new StringBuilder('Java'); String s2 = 'Love'; s1.append(s2); s1.substring(4); int foundAt = s1.indexOf(s2); System.out.println(foundAt); } } אפשרויות: א) -1 ב) 3 ג) 4 ד) א StringIndexOutOfBoundsException נזרק בזמן ריצה. תשובה: ג) 4 הסבר: append(String str) שיטה לשרשר את ה-str ל s1 . ה substring (int index) שיטה מחזירה את המחרוזת מהאינדקס הנתון עד הסוף. אבל מכיוון שאין משתנה מחרוזת לאחסון המחרוזת המוחזרת כך שהוא יושמד. עכשיו indexOf(String s2) שיטה להחזיר את המדד של המופע הראשון של s2 . אז 4 מודפס בתור s1='JavaLove'. תוכנית 5: Java class Writer { public static void write() { System.out.println('Writing...'); } } class Author extends Writer { public static void write() { System.out.println('Writing book'); } } public class Programmer extends Author { public static void write() { System.out.println('Writing code'); } public static void main(String[] args) { Author a = new Programmer(); a.write(); } } אפשרויות: א) כתיבה... ב) כתיבת ספר ג) כתיבת קוד ד) הידור נכשל תשובה: ב) ספר כתיבה הסבר: מכיוון שלא ניתן לעקוף מתודות סטטיות, זה לא משנה איזה אובייקט מחלקה נוצר. כְּמוֹ א הוא א מְחַבֵּר סוג הפניה כל כך תמיד מְחַבֵּר שיטת המחלקה נקראת. אם נסיר לִכתוֹב() שיטה מ מְחַבֵּר כיתה אז סוֹפֵר שיטת class נקראת as מְחַבֵּר הכיתה מתארכת סוֹפֵר מַחלָקָה.