2011-gre-cs-practice-book.pdf/Q36

Материал из DISCOPAL
< 2011-gre-cs-practice-book.pdf
Версия от 19:41, 19 декабря 2024; StasFomin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Вопрос: Q36-08c765

Рассмотрим следующий код на Java:

class BaseClass
{
    int data = 101;
    public void print ()
    {
        System.out.print ( data + " " );
    }
    public void fun ()
    {
        print ();
    }
}
class SubClass extends BaseClass
{
    int data = 202;
    public void print ()
    {
        System.out.print ( data + " " );
    }
}
class TestClass
{
    public static void main ( String[] args )
    {
        BaseClass obj = new SubClass ();
        obj.print ();
        obj.fun ();
        System.out.print ( obj.data );
    }
}

Что выведется при выполнении TestClass.main()?

Ответы

  • 101 101 101
  • 101 202 202
  • 202 101 101
  • Правильный ответ: 202 202 101
  • 202 202 202

Объяснение

Исходники — вопрос 36 на 32 странице книги «2011-gre-cs-practice-book.pdf»

В main создается объект obj типа BaseClass, но фактически это объект SubClass: BaseClass obj = new SubClass().

  • Таким образом в obj.print() будет вызван метод print() из SubClass, который печатает значение data из SubClass, то есть 202.
  • При вызове obj.fun() метод fun() вызывается у obj, который ссылается на SubClass. Этот метод вызывает print(), который снова будет использовать метод из SubClass, поэтому снова будет напечатано 202.
  • Вызов System.out.print(obj.data): здесь obj.data обращается к полю data из BaseClass, так как data в BaseClass не переопределяется в SubClass (это не связано с методами, а с полями). Поле data в BaseClass имеет значение 101, поэтому будет напечатано 101.

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.