פורסם 2007 בדצמבר 517 שנים למדתי היום בקצרה על מחלקות abstarct ו interface בבוקר אני יותר אתעמק בזה . תכלס מה זה נותן למתכנת ? במה זה עוזר לו ? ואם אפשר דוגמאות אשמח תודה . ועוד שאלה public class A{ public A (int i) { System.out.println (i); }}public class B extends A{ public B (int i) { A a = new A(2); System.out.println(i); }} מה לא בסדר בתוכנית ?יש שגיאה כזאתcannot find symbol constructor Aלמה קיבלנו שגיאה כזאת ? מה לא בסדר ?
פורסם 2007 בדצמבר 517 שנים interface מאפשר לך ליצור מבנה קבוע(בלי מימוש) שאפשר לממש אותה לכל מיני צרכים אחרי זה.. ואז לעבוד עם כל המימושים בלי להתיחס לזה שהם שונים..נראה לי שלא הסברים הכי טוב אבל אני אתן דוגמה.. למשל אתה רוצה לממש רשימה מקושרת, אז יש קודם כל, כל מיני סוגי מימושים: מערך, וקטור וכו'...ואז אתה יכול להשתמש בזה בכך שתכתוב מחלקה למשל עזרים לרשימה מקושרת, שיהיה בה חיפוש אוו החלפה או כל מיני דברים כאלה בלי שיהיה אכפת לך שהרשימות שתקבל שונות לגמרי במימוש שלהן. זאת דוגמא מאוד אבסטרקטית שמביאה להגדרה הבאה: אבסטרקט הוא גם סוג של מבנה קבוע, אבל הוא יכול לכלול גם מימוש לשיטות, שלא כמו אינטרפס שמכיל רק חתימות. כל מחלקה שתרחיב את האבסטרקט הזה יהיו לה את כל השיטות של המבנה, ואז שוב תוכן להחזיק פויטר רק למחלקת אבסטרקט אבל בעצם יכול להיות שיש לך סוג הרבה יותר קונקרטי אבל זה לא ישנה לך כי אתה צריך רק את השיטות הקבועות של האבסטרקט.הבעיה בקטע קוד היא שבמחלקה A אין לך קונסטרקטור ריק.מה שג'אווה עושה שאתה לא רואה זה מוסיפה בתחילת הקונסטרקטור של B קריאה לקונסטרקטור ריק של A.אבל אין כזה כי מימשת קונסטרקטור אחר.אגב לא ברור לי למה אתה יוצר אובייקט חדש a? אתה בטוח שהבנת את הרעיון של subtype?
פורסם 2007 בדצמבר 617 שנים עבור כל מחלקה, אם לא הגדרת לו בנאי, יוגדר הבנאי הסטנדרטי(שלא עושה כלום, ללא פרמטרים).כדי לאתחל את מחלקת הבסיס(אם הגדרת לה בנאי), עלייך לקרוא לsuper(2);בשורה הראשונה של הקונסטרקטור. שים לב שיש שם 2 בגלל שאתה רצית 2(כנראה, לפי הקוד שהבאת מקודם). אם היית רוצה לשלוח פרמטרים אחרים לקונסטרקטור שלו, היית רושם אותם בתוך הסוגריים(במקום ה- 2).
פורסם 2007 בדצמבר 617 שנים מחבר הבעיה בקטע קוד היא שבמחלקה A אין לך קונסטרקטור ריק.מה שג'אווה עושה שאתה לא רואה זה מוסיפה בתחילת הקונסטרקטור של B קריאה לקונסטרקטור ריק של A.אבל אין כזה כי מימשת קונסטרקטור אחר.אבל קראנו לקונסטרקטור A(2 ורשום במחלקה A קונסטרקטור A(int אז למה אנחנו זקוקים לבנאי ריק ???
פורסם 2007 בדצמבר 617 שנים השורה הזו:A a = new A(2);מנסה להגדיר אובייקט חדש בשם a, שיהיה קיים רק בתוך אותה הפונקציה.אתה חייב לקרוא לקונסטרקטור של A באמצעות super, כמו ש-UI הסביר.
פורסם 2007 בדצמבר 617 שנים לא.פשוט להחליף את כל השורה בזו:super(2);שים לב שזו חייבת להיות השורה הראשונה בבנאי של B.
פורסם 2007 בדצמבר 617 שנים מחבר הבנתי שחייב להשתמש ב סופר אבל לא הבנתי את הקטע עם הבנאי הריק , הרי לא קראנו לבנאי ריק בכלל :s05: או שלא הבנתי אתכם ?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.