עבור לתוכן

ג'אווה abstract interface מה זה נותן למתכנת ?

Featured Replies

פורסם

למדתי היום בקצרה על מחלקות 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

למה קיבלנו שגיאה כזאת ? מה לא בסדר ?

פורסם

interface מאפשר לך ליצור מבנה קבוע(בלי מימוש) שאפשר לממש אותה לכל מיני צרכים אחרי זה.. ואז לעבוד עם כל המימושים בלי להתיחס לזה שהם שונים..

נראה לי שלא הסברים הכי טוב אבל אני אתן דוגמה.. למשל אתה רוצה לממש רשימה מקושרת, אז יש קודם כל, כל מיני סוגי מימושים: מערך, וקטור וכו'...

ואז אתה יכול להשתמש בזה בכך שתכתוב מחלקה למשל עזרים לרשימה מקושרת, שיהיה בה חיפוש אוו החלפה או כל מיני דברים כאלה בלי שיהיה אכפת לך שהרשימות שתקבל שונות לגמרי במימוש שלהן.

זאת דוגמא מאוד אבסטרקטית שמביאה להגדרה הבאה: אבסטרקט הוא גם סוג של מבנה קבוע, אבל הוא יכול לכלול גם מימוש לשיטות, שלא כמו אינטרפס שמכיל רק חתימות. כל מחלקה שתרחיב את האבסטרקט הזה יהיו לה את כל השיטות של המבנה, ואז שוב תוכן להחזיק פויטר רק למחלקת אבסטרקט אבל בעצם יכול להיות שיש לך סוג הרבה יותר קונקרטי אבל זה לא ישנה לך כי אתה צריך רק את השיטות הקבועות של האבסטרקט.

הבעיה בקטע קוד היא שבמחלקה A אין לך קונסטרקטור ריק.

מה שג'אווה עושה שאתה לא רואה זה מוסיפה בתחילת הקונסטרקטור של B קריאה לקונסטרקטור ריק של A.

אבל אין כזה כי מימשת קונסטרקטור אחר.

אגב לא ברור לי למה אתה יוצר אובייקט חדש a? אתה בטוח שהבנת את הרעיון של subtype?

פורסם
  • מחבר

בכל תת מחלקה ( extends) ג'אווה מוסיפה בנאי ריק ?

פורסם

עבור כל מחלקה, אם לא הגדרת לו בנאי, יוגדר הבנאי הסטנדרטי(שלא עושה כלום, ללא פרמטרים).

כדי לאתחל את מחלקת הבסיס(אם הגדרת לה בנאי), עלייך לקרוא ל

super(2);

בשורה הראשונה של הקונסטרקטור. שים לב שיש שם 2 בגלל שאתה רצית 2(כנראה, לפי הקוד שהבאת מקודם). אם היית רוצה לשלוח פרמטרים אחרים לקונסטרקטור שלו, היית רושם אותם בתוך הסוגריים(במקום ה- 2).

פורסם
  • מחבר

הבעיה בקטע קוד היא שבמחלקה A אין לך קונסטרקטור ריק.

מה שג'אווה עושה שאתה לא רואה זה מוסיפה בתחילת הקונסטרקטור של B קריאה לקונסטרקטור ריק של A.

אבל אין כזה כי מימשת קונסטרקטור אחר.

אבל קראנו לקונסטרקטור A(2 ורשום במחלקה A קונסטרקטור A(int

אז למה אנחנו זקוקים לבנאי ריק ???

פורסם

השורה הזו:

A a = new A(2);

מנסה להגדיר אובייקט חדש בשם a, שיהיה קיים רק בתוך אותה הפונקציה.

אתה חייב לקרוא לקונסטרקטור של A באמצעות super, כמו ש-UI הסביר.

פורסם
  • מחבר

כלומר הייתי צריך להחליף את השורה בזה ?

 A a =new super (2) ;

פורסם

לא.

פשוט להחליף את כל השורה בזו:

super(2);

שים לב שזו חייבת להיות השורה הראשונה בבנאי של B.

פורסם
  • מחבר

ומה עם a ? לא צריך מצביע לאובייקט שנוצר ?

עריכה : אה הבנתי . תודה .

פורסם
  • מחבר

הבנתי שחייב להשתמש ב סופר

אבל לא הבנתי את הקטע עם הבנאי הריק , הרי לא קראנו לבנאי ריק בכלל :s05:

או שלא הבנתי אתכם ?

פורסם

סליחה זה טעות שלי, לא צריך בנאי ריק במקרה הזה.

פורסם
  • מחבר

או קי סבבה חבר'ס :xyxthumbs:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים