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

Материал из DISCOPAL
Перейти к: навигация, поиск
 
(не показаны 3 промежуточные версии 1 участника)
Строка 1: Строка 1:
{{reserve-task|[[Участник:Urmat A|Urmat A]] 14:59, 19 декабря 2024 (UTC)}}== Вопрос: Q36-08c765 ==
+
== Вопрос: Q36-08c765 ==
 
+
Рассмотрим следующий код на Java:
<i>Тут вставьте перевод вопроса.
+
<source lang="java">
Используйте [https://wiki.4intra.net/Help:%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 возможности разметки],
+
class BaseClass
включая формулы и т.п, если будут графы — посмотрите как задать их текстом https://wiki.4intra.net/Graphviz .  
+
{
Если код — теги «code-pascal», «code-c» или «code-python».
+
    int data = 101;
 
+
    public void print ()
Старайтесь нетривиальные понятия, особенно незнакомые вам, найти ссылку на википедию и вставить (нейросети лажают!).
+
    {
Это важно, чтобы найти корректный перевод (то, что в википедии, или на худой конец — точно массово гуглится).
+
        System.out.print ( data + " " );
 
+
    }
Потом конечно сотрите инструкции, которые тут курсивом.</i>
+
    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 );
 +
    }
 +
}
 +
</source>
 +
Что выведется при выполнении TestClass.main()?
  
 
=== Ответы ===
 
=== Ответы ===
<i>Если ответы простые, однострочные, используйте простой способ задания ответов списком, типа так
+
* 101 101 101
(префикс «Правильный ответ:» — это дословно, для правильного ответа, неважно, какой он будет в списке)</i>
+
* 101 202 202
 
+
* 202 101 101
* Правильный ответ: тут реально правильный ответ
+
* Правильный ответ: 202 202 101
* неправильный ответ
+
* 202 202 202
* еще какой-то неправильный ответ
+
* еще какой-то неправильный ответ
+
* еще какой-то неправильный ответ
+
 
+
<i>Если ответы длинные, многострочные, или там графы, используйте
+
[https://wiki.4intra.net/MediawikiQuizzer/ru#.D0.9E.D1.82.D0.B2.D0.B5.D1.82.D1.8B способ задания ответов разделами],
+
Но такое очень редко встречается. </i>
+
 
+
  
 
=== Объяснение ===
 
=== Объяснение ===
<i>Сначала заполните номер страницы с этим вопросом
+
{{cstest-source|2011-gre-cs-practice-book.pdf|32|36}}
{{cstest-source|2011-gre-cs-practice-book.pdf|тут-номер-страницы-с-вопросом-36|36}}
+
 
+
Если все сделаете правильно, по ссылке выше будет открываться правильная страница в правильном PDFе.
+
  
Ну и наконец, вики-разметкой напишите ваше понимание, почему правильный ответ — правильный, а [[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|[[Участник:StasFomin|StasFomin]] 19:41, 19 декабря 2024 (UTC)}}
  
{{question-ok|}}
+
[[Категория:OOP]]

Текущая версия на 19:41, 19 декабря 2024

Вопрос: 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.