2011-gre-cs-practice-book.pdf/Q36 — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
Строка 5: Строка 5:
 
class BaseClass
 
class BaseClass
 
{
 
{
int data = 101;
+
    int data = 101;
public void print ()
+
    public void print ()
{
+
    {
System.out.print ( data + " " );
+
        System.out.print ( data + " " );
}
+
    }
public void fun ()
+
    public void fun ()
{
+
    {
print ();
+
        print ();
}
+
    }
 
}
 
}
 
class SubClass extends BaseClass
 
class SubClass extends BaseClass
 
{
 
{
int data = 202;
+
    int data = 202;
public void print ()
+
    public void print ()
{
+
    {
System.out.print ( data + " " );
+
        System.out.print ( data + " " );
}
+
    }
 
}
 
}
 
class TestClass
 
class TestClass
 
{
 
{
public static void main ( String[] args )
+
    public static void main ( String[] args )
{
+
    {
BaseClass obj = new SubClass ();
+
        BaseClass obj = new SubClass ();
obj.print ();
+
        obj.print ();
obj.fun ();
+
        obj.fun ();
System.out.print ( obj.data );
+
        System.out.print ( obj.data );
}
+
    }
 
}  
 
}  
 
</source>
 
</source>
Строка 40: Строка 40:
 
#101 202 202
 
#101 202 202
 
#202 101 101
 
#202 101 101
#202 202 101
+
#Правильный ответ: 202 202 101
 
#202 202 202  
 
#202 202 202  
  
 
=== Объяснение ===
 
=== Объяснение ===
<i>Сначала заполните номер страницы с этим вопросом
 
{{cstest-source|2011-gre-cs-practice-book.pdf|тут-номер-страницы-с-вопросом-36|36}}
 
  
Если все сделаете правильно, по ссылке выше будет открываться правильная страница в правильном PDFе.
+
{{cstest-source|2011-gre-cs-practice-book.pdf|32|36}}
  
Ну и наконец, вики-разметкой напишите ваше понимание, почему правильный ответ — правильный, а [[2004-gre-cs-practice-book.pdf/Q16|неправильные варианты — неправильны]].
+
В main создается объект obj типа BaseClass, но фактически это объект SubClass: BaseClass obj = new SubClass().
Тут тоже могут быть полезны [[2004-gre-cs-practice-book.pdf/Q03|ссылки на википедию]],  
+
*Таким образом в obj.print() будет вызван метод print() из SubClass, который печатает значение data из SubClass, то есть 202.
решение вами [[2004-gre-cs-practice-book.pdf/Q12|рекуррентных уравнений в sympy]].
+
*При вызове obj.fun() метод fun() вызывается у obj, который ссылается на SubClass. Этот метод вызывает print(), который снова будет использовать метод из SubClass, поэтому снова будет напечатано 202.
 
+
*Вызов System.out.print(obj.data): здесь obj.data обращается к полю data из BaseClass, так как data в BaseClass не переопределяется в SubClass (это не связано с методами, а с полями). Поле data в BaseClass имеет значение 101, поэтому будет напечатано 101.
</i>
+
  
 
{{question-ok|}}
 
{{question-ok|}}
 +
 +
{{checkme|[[Участник:Urmat A|Urmat A]] 16:50, 19 декабря 2024 (UTC)}}

Версия 16:50, 19 декабря 2024

Задача зарезервирована: Urmat A 14:59, 19 декабря 2024 (UTC)

Вопрос: 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()?

Ответы

  1. 101 101 101
  2. 101 202 202
  3. 202 101 101
  4. Правильный ответ: 202 202 101
  5. 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.Check-me-animated.gif Решено: Urmat A 16:50, 19 декабря 2024 (UTC)