מבוא למדעי המחשב המחלקה Object
תוכן עניינים Object הורשה והמחלקה
ערך שם טיפוס DynamicIntArray da data size incrementsize DynamicArray תזכורת - Object[] data; int size; int incrementsize; DynamicArray זה מה שאמרנו על Object מחלקה ב- Java במשתנה מסוג Object ניתן לתלות כל אובייקט ב- Java כדי לפעול על אובייקט שתלינו על משתנה מסוג Object יש "להגיד" לקומפיילר מה תלינו באמצעות המרה בואו נשלים את התמונה... שדות בנאים DynamicIntArray(int initialcapacity) DynamicIntArray() שיטות int size() boolean isempty() void add(object element) void add(int index, Object element) Object get(int index) Object set(int index, Object element) Object remove(int index) String tostring() boolean equals(object x)
אובייקטים מסוג Object אפשר ליצור אובייקטים מסוג Object (אם כי בדר"כ אין הרבה מה לעשות איתם) public static void main(string[] args) { Object object1 = new Object(); Object object2 = new Object(); System.out.println(object1 == object2); // false Object object3 = object2; System.out.println(object2 == object3); // true
המחלקה Object public String tostring() במחלקה מוגדרות מספר שיטות (קטן), ששתיים מהן מעניינות אותנו: public boolean equals(object x)
Object השיטות tostring ב- ו- equals public boolean equals(object other) { return this == other; public String tostring() { return <type>@<address>; public static void main(string[] args) { Object object1 = new Object(); Object object2 = new Object(); System.out.println(object1.equals(object2)); // false System.out.println(object1.toString()); // java.lang.object@2a139a55 System.out.println(object1); // java.lang.object@2a139a55
המחלקה Object,Object כל מחלקה ב- Java "מרחיבה" ("יורשת") את המחלקה ולכן: equals ו- tostring מוגדרות השיטות Java בכל מחלקה ב-
המחלקה DynamicArray (הרחבה של (Object? Object() String tostring() boolean equals(object other) Object[] data; int size; int incrementsize; DynamicArray DynamicIntArray(int initialcapacity) DynamicIntArray() int size() boolean isempty() void add(object element) void add(int index, Object element) Object get(int index) Object set(int index, Object element) Object remove(int index) שדות של המחלקה Object בנאי של המחלקה Object שיטות של המחלקה Object שדות שנוספו במחלקה DynamicArray בנאים של המחלקה DynamicArray שיטות שנוספו במחלקה DynamicArray
השדות של אובייקט מסוג DynamicArray השדות של Object השדות שנוספו ערך שם טיפוס? DynamicIntArray da data size incrementsize
המחלקה Object ומה אם tostring ו- equals לא מתאימים? "נדרוס" (overriding) אותן (נגדיר אותן מחדש) כפי שהכן עשינו במחלקה DynamicArray
? Object() String tostring() boolean equals(object other) Object[] data; int size; int incrementsize; DynamicArray DynamicIntArray(int initialcapacity) DynamicIntArray() int size() boolean isempty() void add(object element) void add(int index, Object element) Object get(int index) Object set(int index, Object element) Object remove(int index) String tostring() boolean equals(object other) דריסה התאמת השיטות לצרכינו שדות של המחלקה Object בנאי של המחלקה Object שיטות של המחלקה Object שדות שנוספו במחלקה DynamicArray בנאים של המחלקה DynamicArray שיטות שנוספו במחלקה DynamicArray שיטות ששונו במחלקה DynamicArray
DynamicArray דריסה של tostring במחלקה // returns a String representing this object public String tostring() { String result = "{"; for (int i = 0; i < size; i = i + 1) { Object x = data[i]; if (x == null) result += "(null)"; else result += "(" + x.tostring() + ")"; result += ""; return result;
DynamicArray דריסה של equals במחלקה // Compares the array for equality // assume no data is null public boolean equals(object x) { if (!(x instanceof DynamicArray)) return false; DynamicArray other = (DynamicArray) x; boolean isequals = this.size == other.size; for (int i = 0; i < size && isequals; i = i + 1) if (!this.data[i].equals(other.data[i])) isequals = false; return isequals; < vvvvvvvvvvvvvvvv > iiiiiiiiiiiiiiiiiiii < tttttttt > האופרטור :instanceof String s = new String("hello"); Integer i = new Integer(3); Object o = i; System.out.println(s instanceof String); // true System.out.println(s instanceof Object); // true s = null; System.out.println(s instanceof String); // false System.out.println(o instanceof Integer);// true System.out.println(o instanceof String); // false System.out.println(s instanceof Object); // false
כלל הבצל איזה שיטה תופעל?,DyanamicArray אחרת אם דרסנו את tostring שב- Object ב- DynamicArray תופעל הדורסת זו שב- זו בכל מקרה tostring מוגדרת עבור DynamicArray
המחלקה Object למה במשתנה מסוג Object ניתן לתלות כל אובייקט ב-?Java כי כל אובייקט ב- Java הוא מסוג Object (מכיל כל מה שיש ב- (Object אבל, אם תלינו אובייקט במשתנה מסוג Object ואנחנו רוצים לפעול עליו באמצעות שיטה שאינה מופיע ב- Object (לענייננו לא tostring ולא (equals אנחנו חייבים "להגיד" לקומפיילר באמצעות המרה מה סוג האובייקט שתלינו במשתנה
ה reference type vs instance type ה - type שהקומפיילר מייחס לאובייקט reference type - type האמיתי של האובייקט (המחלקה ממנה האובייקט נוצר) instance type instance type reference type String s1 = new String("hello"); Object o1 = new String("world"); char c1 = o1.charat(2); // comp. error char c2 = ((String) o1).charat(2); // c2 == r System.out.println(o1.toString()); // world
תוכן עניינים הורשה והמחלקה Object המחלקה DynamicIntArray
- המסגרת המחלקה DynamicIntArray public class DynamicIntArray extends DynamicArray {
המחלקה DynamicIntArray public DynamicIntArray() { super(); public void add(object element) { if (!(element instanceof Integer)) throw new IllegalArgumentException(); super.add(element); public void add(int index, Object element) { if (!(element instanceof Integer)) throw new IllegalArgumentException(); super.add(index, element); public Object set(int index, Object element) { if (!(element instanceof Integer)) throw new IllegalArgumentException(); return super.set(index, element); public int sum() { int sum = 0; for (int i = 0; i < size(); i = i + 1) sum += (int) get(i); return sum;
תוכן עניינים הורשה והמחלקה Object המחלקה DynamucIntArray קצת על super
super משמש להפניה לשדות, בנאים או שיטות של מחלקת האב הפניה לשדות או שיטות super.<method-name>( ) super.<filed-name> הכרחי רק במקרה של "הסתרה" הפניה לבנאי של מחלקת האב מתוך בנאי של מחלקת הבן (תמיד מהשורה הראשונה) super( )