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

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

+10

Какие парадигмы ООП представлены в даной иерархии классов (выберите все подходящие варианты):
public abstract class animal { 
 public abstract void say(); 
} 
public class dog extends animal{ 
 public void say() { 
    System.out.println("Гав!"); 
 }   
} 
public class cat extends animal{ 
  public void say() { 
    System.out.println("Мяу!"); 
  } 
} 
Ваши ответы
Наследование
Полиморфизм
Что при вставке в строку 7 позволит выполнить код без ошибок:
01. class A { } 
02. class B extends A { } 
03. class C extends B { 
04.   public static void main(String[] args) { 
05.      A obj1 = new A(); 
06.      C obj2 = new C(); 
07.      // програмный код 
08.      C obj3 = (C)obj1; 
09.   } 
10. } 
Ваши ответы
obj1 = (B) obj2;
Что будет выведено на экран?
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()); 
 
   } 
} 
Ваши ответы
Ошибка компиляции.
Объяснение:

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

Как проявляет себя полиморфизм в практическом программировании?
Ваши ответы
все утверждения верны
Объяснение:

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

Предположим, что класс В наследует класс А. Какие утверждения обязательно верны (укажите все подходящие варианты)?
Ваши ответы
если класс А имеет только private-конструкторы, то и конструкторы класса В должны быть private
если класс А имел статический метод, то метод в классе B с той же сигнатурой тоже должен быть статическим
если класс А объявлен как final, то класс В тоже должен быть final
Объяснение:

3 и 5 - не обязательны, 1 и 4 - не допускают наследование

Что будет выведено в результате выполнения данного кода ?
public class Main { 
   public static void main(String[] args) { 
       new ExampleClass2().getVersion(); 
   } 
} 
 
class ExampleClass1 { 
   private String version = "current version: 0.1a"; 
   private void getVersion() { 
       System.out.println(version); 
   } 
} 
 
class ExampleClass2 extends ExampleClass1 { 
   private String version = "current version: 0.5b"; 
   @Override 
   public void getVersion() { 
       System.out.println(version); 
   } 
} 
Ваши ответы
current version: 0.1a
Объяснение:

@Override - является аннотацией, которая сообщает компилятору о том, что метод (идущий за аннотацией) перекрывает метод супер класса. Он является необязательным, но в данном случае его использование вызовет ошибку компиляции т.к. метод getVersion() в классе ExampleClass1 объявлен как private и соответственно метод getVersion() в классе ExampleClass2 его не перекрывает.

Какой будет результат компиляции и выполнения кода?
public class Parent { 
   private void whoAreYou(){ System.out.println("I'm parent"); } 
 
   public static void main(String []args){ 
       Parent p = new Child(); 
       p.whoAreYou(); 
   } 
} 
 
class Child extends Parent { 
   public void whoAreYou(){ System.out.println("I'm child"); } 
} 
Ваши ответы
I'm child
I'm parent
Что будет напечатано на экран в результате компиляции и выполнения кода?
public class Test { 
   public static void main(String[] args){ 
       A a = new B(); 
       a.test(5); 
   } 
} 
class A { 
   public void test(Object obj){ 
       System.out.println("Object"); 
   } 
} 
class B extends A { 
   public void test(Integer obj){ 
       System.out.println("Integer"); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Вызов метода test не является полиморфным, потому что метод public void test(Object obj) не переопределён, а всего лишь перегружен в потомке.

Какой результат будет получен после компиляции и выполнения данного кода:
class A { 
   String name = "a "; 
   String test() { 
       return "test A "; 
   } 
} 
 
class B extends A { 
   String name = "b "; 
   String test() { 
       return "test B "; 
   } 
} 
 
public class Main { 
   public static void main(String[] args) { 
       new Main().go(); 
   } 
 
   void go() { 
       A m = new B(); 
       System.out.println(m.name + m.test()); 
   } 
} 
Ваши ответы
Ошибка выполнения
Объяснение:

Полиморфизм распространяется только на методы

Каким будет результат компиляции и выполнения следующего кода?
class Main{ 
 
   public static void main(String...args){ 
       C c = new C(); 
 
   } 
 
} 
class A{ 
   static{ 
       System.out.println("static A1"); 
   } 
    A(){ 
       System.out.println("A"); 
    } 
} 
class B extends A{ 
   static{ 
       System.out.println("static B1"); 
   } 
    B(){ 
        System.out.println("B"); 
    } 
} 
class C extends B{ 
   static{ 
       System.out.println("static C1"); 
   } 
   { 
       System.out.println("non static C1"); 
   } 
    C(){ 
        this("Hello"); 
        System.out.println("C1"); 
    } 
    C(String str){ 
        System.out.println("C2"); 
    } 
    { 
        System.out.println("non static C2"); 
   } 
} 
Ваши ответы
static C1 static B1 static A1 A B non static C1 non static C2 C2 C1