Результаты прохождения теста ООП в Java пользователем ilya201177

Результат прохождения теста "ООП в Java" - Пройден

+24

  • Кто проходил: ilya201177
  • Дата прохождения: 03.02.2019
Выберите правильный результат выполнения кода:
class A { } 
class B extends A { } 
 
public class Main { 
   public static void main (String [] args) { 
       A a = new B(); 
       B b = (B) a; 
       System.out.println(a == b); 
   } 
} 
Ваши ответы
true
Каким будет результат работы программы?
class Print1 { 
   private void print() { 
       System.out.println(777); 
   } 
   void print(Print1 p) { 
       p.print(); 
   } 
} 
 
public class Print2 extends Print1 { 
   void print() { 
       System.out.println(666); 
   } 
   public static void main(String[] args) { 
       Print1 p = new Print1(); 
       Print2 q = new Print2(); 
       p.print(q); 
   } 
} 
Ваши ответы
777
Объяснение:

метод *print* класса Print1 _не переопределяется_ методом *print* класса Print2, так как последний даже не знает о существовании такого в классе-родителе (ибо там он private). Эти методы *print* - это 2 разных метода, доступные _только_ каждый в своем классе. Поэтому, в методе *void print(Print1 p)* при вызове метода *print* компилятор находит приватный метод и, зная, что его дальнейшее переопределение невозможно в принципе, вызывает его.

Что из перечисленного верно о приведенном коде?
private interface Print { // (0) 
   public void print(); 
} 
 
class A implements Print { 
   public void print() { 
       System.out.println("Hello world !"); 
   } 
} 
 
class B extends A implements Print { 
   // (1) 
} 
 
public class MyClass{ 
   public static void main(String args[]) { 
       B classB  = new B(); 
       classB.print(); 
   } 
} 
Что из перечисленного верно о приведенном коде?
Ваши ответы
Код не компилируется из-за строки (0)
Объяснение:

Модификатор private не допустим для top-level классов/интерфейсов.

Что будет выведено на экран?
interface I1{ 
   final int p = 10; 
   public int get(); 
 
} 
 
class B implements I1{ 
   private int p = 20;     
   public int get() {     
       return p; 
   } 
} 
 
class C extends B implements I1{         
   public int get() {     
       return p; 
   } 
} 
 
public class A{ 
 
   public static void main(String...args){ 
       B obj = new C();         
       System.out.print(obj.get()); 
 
   } 
} 
Ваши ответы
10
Объяснение:

Переменная р объявлена как private, поэтому она не унаследуется в классе С.

Что выведет данный код?
import java.util.LinkedHashSet; 
import java.util.Set; 
public class MyClass 
 
{ 
   public static void main(String[] args) 
   {  
       Set<String> stringSet = new LinkedHashSet<String>(); 
       stringSet.add("2"); 
       stringSet.add("1"); 
       stringSet.add("2"); 
       stringSet.add("4"); 
       stringSet.add("3"); 
       stringSet.add("5"); 
       for( String entry : stringSet ) 
           System.out.print( entry ); 
 
   } 
 
}
Ваши ответы
21435
Объяснение:

Правильный ответ 21435.
Многие могут задуматься, что при попытке добавлении существующего элемента в LinkedHashSet существует 2 варианта развития событий. Первый вариант - существующий элемент удаляется из коллекции, а в конец коллекции добавляется (этот же) элемент. Второй вариант - коллекция не изменяется и все элементы остаются на своих местах. В LinkedHashSet реализован второй вариант.

Каков результат компиляции и выполнения данного кода?
class Parent { 
   public Parent(String s){ 
       print("created"); 
   } 
   public static void print(String s){ 
       System.out.println("Parent: " + s); 
   } 
} 
 
public class Child extends Parent { 
   public static void print(String s){ 
       System.out.println("Child: " + s); 
   } 
   public static void main(String[] args){ 
       Child child = new Child(); 
       print("created"); 
   } 
} 
Ваши ответы
Ошибка компиляции
Каким будет вывод после выполнения данной программы?
class A { } 
class B extends A { } 
abstract class C { 
   abstract void doAction(A a); 
   void start(A a){ 
       doAction(a); 
   } 
} 
class D extends C { 
   void doAction(A a) { 
       System.out.println("A action"); 
   } 
   void doAction(B b) { 
       System.out.println("B action"); 
   } 
} 
public class Test { 
   public static void main(String[] args) { 
       new D().start(new B()); 
   } 
} 
Ваши ответы
A action
Как проявляет себя полиморфизм в практическом программировании?
Ваши ответы
с помощью полиморфизма можно переопределять методы при наследовании
с помощью полиморфизма можно переопределять поля при наследовании
Объяснение:

Переопределение при наследовании это есть полиморфизм. Получается, что есть общий интерфейс (это будет базовый класс), и переопределённое поведение в подклассах. В итоге получается - один интерфейс, множество реализаций. Это полиморфизм.

Каков результат выполнения следующего кода:
class A implements Cloneable{                                //1 
   public int i=10; 
} 
 
class B extends A implements Cloneable{ 
   public int i=20; 
   @Override 
   public B clone() throws CloneNotSupportedException { 
       B cloneA = (B) super.clone();                       //2 
       cloneA.i = 15; 
       return cloneA; 
   } 
} 
 
public class MyClass { 
   public static void main(String[] args) throws CloneNotSupportedException { 
       B b = new B(); 
       A a = b.clone();                                     //3 
       System.out.println(a.i); 
   } 
}
Ваши ответы
Ошибка выполнения в строке 2
Объяснение:

<u>Объяснение №1.</u> Интерфейс Cloneable не имеет в себе методов, поэтому переопределять метод clone нет необходимости. При вызове super.clone() будет осуществлен вызов метода clone у класса Object, т.к. класс А неявно наследует класс Object, поэтому компиляция пройдет успешно. Результат будет 10, т.к. в методе clone класса B, переменная cloneA имеет тип B, соответственно значение i меняется у экземпляра класса B.

Даны следующие классы:
class Parent { } 
class DerivedOne extends Parent { } 
class DerivedTwo extends Parent { } 
Выберите единственное верное высказывание
о следующем блоке кода: Parent p = new Parent(); 
DerivedOne d1 = new DerivedOne(); 
DerivedTwo d2 = new DerivedTwo(); 
d1 = (DerivedOne)d2; 
Ваши ответы
Исключение ClassCastException.
Объяснение:

Animal a = new Animal(); Cat c = new Cat(); Dog d = new Dog(); c = (Cat)d; // Ошибка компиляции. Кошка не может быть собакой. Если бы было: Animal a = new Animal(); Animal c = new Cat(); Animal d = new Dog(); c = (Cat)d; // то - ClassCastException, т.к. О том, что d - это собака, компилятор не знает. Это обнаружится во врямя выполнения и выкинется исключение