Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Теор. вопрос про наследование / 6 сообщений из 6, страница 1 из 1
12.12.2006, 17:47:43
    #34194292
hinotf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теор. вопрос про наследование
Это вопрос и разъяснение из него из бесплатного экзамена от Whizlabs
Наверное, вечер тому причиной, но понять не могу. Ответил верно на интуиции. Не могли бы уважаемые гуру разъяснить каждый пункт ответа?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Which of the following methods inserted independently at the indicated line in the following 
code can cause it to compile correctly?

 class  SuperBase{}
 class  Base  extends  SuperBase{} 
 class  Derived  extends  Base{}
 class  CovariantTest1
{
   public  Base getIt(){ return   new  Base();}
}
 class  SubCovariantTest  extends  CovariantTest1
{
// Insert code here
}

Ответы
Код: plaintext
1.
2.
3.
4.
5.
a  public  Derived getIt(){ return   new  Derived();} 
b  public  Base getIt(){ return   new  Derived();} 
c  public  SuperBase getIt() { return   new  Derived();} 
d  public  SuperBase getIt() { return   new  Base();} 
e  public  Derived getIt() { return   new  Base();}


Объяснение:
Choices A and B are the correct answers. Support for covariant return types will allow a
method overriding a super class method to return a subclass of the super class method's
return type. So choice A is correct. Choice B is correct because it conforms to overriding
rules. The return type declared in the case of choices C and D is a super class of the super
class method's return type, which is not allowed. Choice E is incorrect because it returns the
super class object, while the declared return type is of the subclass.

Nai tiruvantel ar varyuvantel i Valar tieyanna nu vilya
...
Рейтинг: 0 / 0
12.12.2006, 18:08:21
    #34194358
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теор. вопрос про наследование
...
Рейтинг: 0 / 0
12.12.2006, 22:05:27
    #34194841
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теор. вопрос про наследование
Это появилось в Java 5, насколько мне известно.
...
Рейтинг: 0 / 0
12.12.2006, 23:51:09
    #34194977
ssppeedd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теор. вопрос про наследование
что интерстно, это то, что и в начальноам jsdc doc они об этом не писали, как и о многом другом.
с этим столкнулся, когда готовился к сертификации, просто отвутствовали методы у классов %)

качайте поcлединие jdocи!
...
Рейтинг: 0 / 0
13.12.2006, 08:35:45
    #34195254
GKS_Samara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теор. вопрос про наследование
hinotf пишет:

Интересно, я такие конструкции пропустил. Попробую ответить.

> *class* CovariantTest1
> {
> *public* Base getIt(){*return* *new* Base();}
> }
> *class* SubCovariantTest *extends* CovariantTest1
> {
> // Insert code here
> }
> Ответы

Тут я не смогу ответить, не вспоминая Мейера.
Наследник может только ужесточить (ну или оставить) требования к
возвращаемым значениям, но не может смягчить их- иначе сама суть
наследования нарушится.

> a *public* Derived getIt(){*return* *new* Derived();}

Тут требование к возвращаемому значению ужесточается- объект класса
Derived может рассматриватся как объект класса Base.

> b *public* Base getIt(){*return* *new* Derived();}

Тут очевидно, т.к. интерфейс не изменился, а внутенности, надеюсь, и так
понятны.

> c *public* SuperBase getIt() {*return* *new* Derived();}
> d *public* SuperBase getIt() {*return* *new* Base();}

Тут проблема в том, что требования к значению смягчаются. И содержимое
метода не важно по-определению (реализация не может подменять интерфейс).

> e *public* Derived getIt() {*return* *new* Base();}

Ну а тут просто ошибка в реализации, будем считатать тривиально.

--
Алексей
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
13.12.2006, 10:44:20
    #34195615
hinotf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теор. вопрос про наследование
Судя по процитированной спецификации смысл сводится к следующему: можно переопределить метод и даже изменить ему возвращаемый тип, если этот тип тот же или дочерний.

Nai tiruvantel ar varyuvantel i Valar tieyanna nu vilya
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Теор. вопрос про наследование / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]