JAVA

shakedunay

New member
JAVA

אני לומד ג´אוה עם הספר המתורגם של הוד עמי "the java tutorial" נתקלתי במספר שאלות שאשמח אם תענו לי עליהן: 1) ()obj.getClass().newInstance השורה הזו אמורה להחזירה לי מופע של אותה מחלקה כמו האובייקט obj הביעה שלא הבנתי היא איזה בדיוק קונסטרקטור מפעילה הפונקציה הזו? והאם יש לי אפשרות לשלוט על הקונסטרקטור שהיא מפעילה? 2)האם יש איזה הגיות בהגרדת פונקציה כ privat ו final ? כי הרי אם הפונקציה היא final לא ניתן לדרוס אותה אך אם היא privat אז בכלל לא ניתן להתייחס אליה באופן ישיר וגם לא לדרוס אותה. 3)האם יש הגיון באימרה הבאה, היא נלקחה מתוך הספר שממנו אני לומד(אולי יש טעות בהדפסה שלו ואם תמצאו למה התכוונו אודה לכם מאוד) " אין צורך במחלקה מופשטת כדי להכיל שיטות מופשטות. עםזאת, כל מחלקה שמכילה שיטה מופשטת או שאינה מספקת מימוש לשיטה מופשטת כלשהי המוגדרת במחלקות-העל שלה או בממשקים שהיא מממשת, חייבת להיות מוגדרת כמחלקה מופשטת."
 

voguemaster

New member
הממ

1. נדמה לי ש-newInstance מפעילה את הקונסטרקטור הבסיסי, זה של ברירת המחדל. 2. לא הבנתי את השאלה אבל יש הבדל וצורך גם בזה וגם בזה. לפעמים יש צורך ליצור מתודה שאפשר לקרוא לה או להתייחס אליה ממחלקה יורשת, אבל לא רוצים שתהיה אפשרות לדרוס אותה. בשביל זה בדיוק נועד ה-final. 3. על פני השטח נדמה שאין היגיון, אבל אולי אני מפספס משהו בסיסי.
 

shakedunay

New member
תודה על העזרה אבל...

בקשר לבעיה ה-2 שלי אני ניסיתי ניסיון ובו הגדרתי פונקציה כ privat ו final וכאשר ניסיתי לדרוס אותה הצלחתי וזה גם נשמע דיי הגיוני שאם אני לא יכול להתייחס אליה באופן ישיר אז אני לא יכול לדרוס אותה וזה גם מה שקורה... יש חמישהו מושג אולי? אני יודע שזה לא כ"כ מרכזי להמשך הבנת החומ בספר שלי אבל בכל זאת
 

selalerer

New member
רעיון בקשר ל-3

אולי הכוונה שהמחלקה צריכה להיות מוגדרת כמופשטת אבל שלא תעשה שום דבר שונה ממחלקה שאינה מופשטת וכך למעשה המחלקה אינה מופשטת (אולי לכך התכוון המשורר :-| )
 

shadowrunner

New member
תשובות

1. הקונסטרקטור שמופעל הוא קונסטרקטור הריק במקרה שלא קיים קונסטרקטור ריק תזרק IllegalAccessException 2. בדרך כלל ההגיון בהגדרת פונקציות final הוא שיהיה בלתי אפשרי לדרוס אותם אז לדעתי אתה צודק אין הגיון 3. מה זה לעזעזל שיטה תגיד METHOD-- עצה שלי תתחיל ללמוד מספרים באנגלית
 

shakedunay

New member
תודה על העזרה

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

kirillkh

New member
re

היי. אני מתכנת Java זמן רב ואוכל לענות על השאלות באופן כללי, למרות שאין מולי כרגע דוקומנטציה. אבל את הפרטים תצטרך לברר בעצמך. אענה לפי המספרים שלך: 1) המטוד ()newInstance מחזיר מופע חדש של הקלאס ע"י הפעלת הקונסטרוקטור הריק(ללא פרמטרים), אם ישנו(אחרת תתכן זריקת exception). אתה יכול לקבל את הקונסטרוקטור, שאתה צריך, באמצעות קריאה למטוד שמחזיר את כל הקונסטרוקטורים, לדעתי - ()getConstructors. שוב פעם, אין לי גישה לדוקומנטציה ואני יכול לטעות, אבל נראה לי, שיש גם מטוד שמחזיר לך קונסטרוקטור בעל פרמטרים עם טיפוסים ספציפיים, אותם אתה מוסר כמערך(או ווקטור) של הקלאסים. לדעתי, המטוד נראה כך: (getConstructor(Class[] types אחרי שמצאת את הקונסטרוקטור הנכון, קרא למטוד המתאים כדי להפעיל אותו, משהו כמו ()invoke. לדעתי, ניתן גם ישר להפעיל את הקונסטרוקטור הנידרש באמצעות (newInstance(Class[] types, Object[] values כדי לקבל תשובות אמיתיות ומלאות לשאלה הזו, גש ל-Java API Specification, שבא ביחד עם JSDK. במיוחד שים לב לכל מה שנוגע ל-java.lang.Class ו-java.lang.reflect.Constructor, ול-java.lang.reflect כולו. 2) באמת, את מטוד המוגדר כ-private אי אפשר לדרוס מטבע שלו. אישית אף פעם לא ניסיתי להגדיר מטוד final private, אבל ברור, שניסיון כזה יוביל או לשגיאת זמן הקומפילציה, או להתאלמות שקטה. אם אתה צריך תשובה מדוייקת, גש ל-Java Language Specification, שאפשר להשיג ב-java.sun.com 3) כנראה, הבלבול באמירה נובע מתרגום שגוי של משהו כמו: "An abstract class is not required to contain abstract methods." המשמעות היא שקלאס, שמוגדר abstract, אינו חייב באמת להכיל מטודים אבסטראקטיים, אבל קלאס, שמכיל או יורש מטודים אבסטראקטיים, חייב להיות מוגדר אבסטראקטי, אם אינו מספק מימוש לכל אחד ממטודים האלה. השאלות, שאתה שואל, הן די עמוקות, וספרים למתחילים לא נכנסים לפרטים כאלה. את התשובות לשאלות האלה תמצא בספרי הדוקומנטציה הרשמיים של Sun, והראשון, שכדאי לעיין בו, הוא Java API Specification לאותה הגירסה בה אתה משתמש. בד"כ אפשר למצוא בו את כל התשובות לשאלות שנוגעות בשימוש בספריות סטאנדארטיות. את התיאור המלא ומקיף לכל אשר נוגע בשפה עצמה תמצה ב-Java Language Specification, בו מתוארים פרטי פרטים בשפה טכנית קשה מאוד. Kirill
 

shakedunay

New member
תודה על התשובה המעמיקה

למרות שאני עדיין לא הגעתי לרמה מספקת להבנת כל מה שכתבת.
 
למעלה