2011-gre-cs-practice-book.pdf/Q36 — различия между версиями
Материал из DISCOPAL
Urmat A (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
− | |||
== Вопрос: Q36-08c765 == | == Вопрос: Q36-08c765 == | ||
Рассмотрим следующий код на Java: | Рассмотрим следующий код на Java: | ||
− | <source lang=java> | + | <source lang="java"> |
class BaseClass | class BaseClass | ||
{ | { | ||
− | + | int data = 101; | |
− | + | public void print () | |
− | + | { | |
− | + | System.out.print ( data + " " ); | |
− | + | } | |
− | + | public void fun () | |
− | + | { | |
− | + | print (); | |
− | + | } | |
} | } | ||
class SubClass extends BaseClass | class SubClass extends BaseClass | ||
{ | { | ||
− | + | int data = 202; | |
− | + | public void print () | |
− | + | { | |
− | + | System.out.print ( data + " " ); | |
− | + | } | |
} | } | ||
class TestClass | class TestClass | ||
{ | { | ||
− | + | public static void main ( String[] args ) | |
− | + | { | |
− | + | BaseClass obj = new SubClass (); | |
− | + | obj.print (); | |
− | + | obj.fun (); | |
− | + | System.out.print ( obj.data ); | |
− | + | } | |
} | } | ||
</source> | </source> | ||
Строка 37: | Строка 36: | ||
=== Ответы === | === Ответы === | ||
− | + | * 101 101 101 | |
− | + | * 101 202 202 | |
− | + | * 202 101 101 | |
− | + | * Правильный ответ: 202 202 101 | |
− | + | * 202 202 202 | |
=== Объяснение === | === Объяснение === | ||
− | + | {{cstest-source|2011-gre-cs-practice-book.pdf|32|36}} | |
− | {{cstest-source|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. | ||
− | + | {{question-ok|[[Участник:StasFomin|StasFomin]] 19:41, 19 декабря 2024 (UTC)}} | |
− | + | ||
− | + | ||
− | + | [[Категория: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.