Найти в Дзене
JavaDocs

Тест Java SE 11. Вопрос 2

2. Каков результат работы следующей программы? (Выберите все, что применимо.) — 1: interface HasTail { int getTailLength(); }
2: abstract class Puma implements HasTail {
3: protected int getTailLength() { return 4; }
4: }
5: public class Cougar implements HasTail {
6: public static void main(String[] args) {
7: var puma = new Puma();
8: System.out.println(puma.getTailLength());
9: }
10: public int getTailLength(int length) { return 2; }
11: } — A. 2
B. 4
C. Код не будет скомпилирован из-за строки 3.
D. Код не будет скомпилирован из-за строки 5.
E. Код не будет скомпилирован из-за строки 7.
F. Код не будет скомпилирован из-за строки 10.
G. Результат не может быть определен из предоставленного кода. — 2. C, D, E. Программа содержит три ошибки компилятора. Во-первых, метод getTailLength() в интерфейсе HasTail неявно указан открытым (public), поскольку это абстрактный метод. Следовательно, строка 3 не компилируется, поскольку это недопустимое переопределение, снижающее видимо

2. Каков результат работы следующей программы? (Выберите все, что применимо.)

1: interface HasTail { int getTailLength(); }
2: abstract class Puma implements HasTail {
3: protected int getTailLength() { return 4; }
4: }
5: public class Cougar implements HasTail {
6: public static void main(String[] args) {
7: var puma = new Puma();
8: System.out.println(puma.getTailLength());
9: }
10: public int getTailLength(int length) { return 2; }
11: }

A. 2
B. 4
C. Код не будет скомпилирован из-за строки 3.
D. Код не будет скомпилирован из-за строки 5.
E. Код не будет скомпилирован из-за строки 7.
F. Код не будет скомпилирован из-за строки 10.
G. Результат не может быть определен из предоставленного кода.

2. C, D, E. Программа содержит три ошибки компилятора.

Во-первых, метод getTailLength() в интерфейсе HasTail неявно указан открытым (public), поскольку это абстрактный метод. Следовательно, строка 3 не компилируется, поскольку это недопустимое переопределение, снижающее видимость метода и поэтому ответ C правильный.

Затем класс Cougar реализует перегруженную версию getTailLength() с сигнатурой, отличной от абстрактного метода интерфейса, который он наследует. По этой причине объявление Cougar недопустимо, а ответ D является правильным.

Наконец, ответ E является правильным, поскольку класс Puma помечен как абстрактный и не может быть создан.