|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
малко помощ?
|
|
Автор | javaFen (Нерегистриран) |
Публикувано | 05.06.06 13:47 |
|
Може ли малко помощ? Как да разбирам това? Какви преимущества има?
Kotka е superclass на Persijka:
Kotka kot = new Persijka();
Po kakvo gornoto serazli4ava ot:
Persijka kot = new Persijka();
Blagodarjq predvaritelno.
| |
Тема
|
Re: малко помощ?
[re: javaFen]
|
|
Автор |
DrmR (урод) |
Публикувано | 05.06.06 13:52 |
|
забив:)
ами разликата е че при едното разглеждаш обекта като Котка, т.е. гледаш всички общи черти на котките. Когато го разглеждаш като Персийка, тогава към общите черти на котката имаш достъп и до чертите на Персийката.
Може би по-ясно ще бъде така:
Person you = new Employee()
означава че ти си служител, но в момента ни интересуваш единствено като човек.
Надявам се да съм бил полезен, въпреки че едва ли съм направил перфектното обяснение.
| |
Тема
|
Re: малко помощ?
[re: DrmR]
|
|
Автор | javaFen (Нерегистриран) |
Публикувано | 05.06.06 14:09 |
|
Искаш да кажеш, че при
Kotka kот = new Persijka();
mакар че Обекта е тип Персийка, мога да разглеждам само methodite и променливите на класата Котка т.е. не мога да използвам специализираните methodi и променливи на класата Персийка, макар че тях ги има?
| |
|
Според мен Дрмр само те обърка.
Няма никакво практическо значение дали отляво ще бъде котка или Персийка. Евентуално би си спестил някой каст който иначе би бил експлицитен, но нищо повече.
| |
Тема
|
Re: малко помощ?
[re: eфp. Лyk]
|
|
Автор | javafen (Нерегистриран) |
Публикувано | 05.06.06 15:18 |
|
mersi!
| |
Тема
|
Re: малко помощ?
[re: javaFen]
|
|
Автор | toshe (Нерегистриран) |
Публикувано | 05.06.06 22:16 |
|
Точно така.
| |
Тема
|
Re: малко помощ?
[re: javaFen]
|
|
Автор | EroS (Нерегистриран) |
Публикувано | 06.06.06 03:58 |
|
Разликата е и в тъй наречените early binding и late binding. Едното се прави от компилатора, а другото от ВМ. Доколкото се сещам двете имат някои разлики обаче:
1. Ако използваш "Persijka kot = new Persijka();" това може да ти спести по-нататък в програмата някой down casting, който най-вероятно компилатора ще иска да направиш. Що се отнася до upper casting-a - ой си се прави автоматично.
2. Ако използваш "Котка" при декларацията, и и двата класа имат методи с еднакъв подпис, то май ще бъде извикан този от КОТКА а не този от ПЕРСИИСКА, въпреки че реално обекта ти е "ПЕРСИЙСКА".
Мисля че това са основните разлики.
Надявам се, че бях полезен :-)
| |
|
В отговор на:
2. Ако използваш "Котка" при декларацията, и и двата класа имат методи с еднакъв подпис, то май ще бъде извикан този от КОТКА а не този от ПЕРСИИСКА, въпреки че реално обекта ти е "ПЕРСИЙСКА".
Я пак помисли, че вадя бележника и почвам да пиша 2-ки.
| |
Тема
|
Re: малко помощ?
[re: eфp. Лyk]
|
|
Автор | nasko (Нерегистриран) |
Публикувано | 07.06.06 13:06 |
|
Не бързай да пишеш двойки.
Пичът не го обясни съвсем правилно, но е прав. При overload-нати методи се гледа типът на референцията, не на самия обект.
Пример:
class A {}
class B extends A {}
void abc(A a) {...}
void abc(B b) {...}
A obj = new B();
abc(obj); // Ще се изпълни abc(A)
| |
Тема
|
Re: малко помощ?
[re: nasko]
|
|
Автор |
DrmR (урод) |
Публикувано | 07.06.06 13:44 |
|
А дали пича е имал предвид overload на функции или оverride. Защото методи с еднакви signature са overriden, а не overloaded. Таке че ти си прав, но не и в този случай.
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|