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

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

+45

  • Кто проходил: Mikhail
  • Дата прохождения: 22.08.2018
Что произойдет в результате компиляции и выполнения данного кода ?
class Top{} 
class Sub extends Top{} 
public class Test{ 
 public static void main(String[] args){ 
   Top t = new Top(); 
   Sub s = (Sub) t; 
  } 
} 
Ваши ответы
Ошибка выполнения
Объяснение:

Объект Предка не может быть приведен к объекту Потомка.
ClassCastException

Что будет в результате компиляции и выполнения данного кода?
class Vehicle { 
   public void printSound() { 
       System.out.print("vehicle"); 
   } 
} 
 
class Car extends Vehicle { 
   public void printSound() { 
       System.out.print("car"); 
   } 
} 
 
class Bike extends Vehicle { 
   public void printSound() { 
       System.out.print("bike"); 
   } 
} 
 
public class Test { 
   public static void main(String[] args) { 
       Vehicle v = new Car(); 
       Bike b = (Bike) v; 
 
       v.printSound(); 
       b.printSound(); 
   }    
} 
Ваши ответы
Ошибка выполнения
Что будет в результате копиляции и выполнения следующего кода?
public class Okey extends D{  
   public static void doSome(int[]...a){ 
       for(int[] z:a){ 
           System.out.println(z[0]); 
       } 
   } 
   public static void main(String[] args) { 
       Okey o=new Okey(); 
       int[] a={7,5,48}; 
       int[] b={4,2,3}; 
       o.doSome(a,b); 
 
   } 
} 
class D{ 
   public static void doSome(int[]...a){ 
       for(int[] z:a){ 
           System.out.println(z[1]); 
       } 
   } 
}
Ваши ответы
7 4
Что напечатает следующий код:
class A { } 
class B extends A { } 
class C extends B { } 
 
public class Test { 
   public static void m(A a) { 
       System.out.println("a"); 
   } 
   public static void m(B b) { 
       System.out.println("b"); 
   } 
 
   public static void main(String[] args) { 
       m(new C()); 
   } 
} 
Ваши ответы
b
Каким будет результат выполнения данного кода?
public class Compare { 
   public static void main(String[] args) { 
       String s1 = new String("Hello"); 
       String s2 = new String("Hello"); 
 
       if (s1 == s2) { 
           System.out.println("True"); 
       } else { 
           System.out.println("False"); 
       } 
   } 
} 
Ваши ответы
False
Объяснение:

Оператор "==" сравнивает ссылки. Для сравнения объектов необходимо использовать метод equals.

Какие независимые изменения можно сделать в следующем фрагменте кода, чтобы он компилировался (укажите все подходящие варианты)?
public class B implements Inter<String> {     // 1 
   public static void main(String[] args) {  
       new B().fun(); 
   }  
   public String fun() { 
       System.out.println("B"); 
       return null; 
    } 
}  
class C extends B implements Inter<Boolean> {  // 2 
}  
interface Inter<T> { 
    T fun(); 
} 
Ваши ответы
Убрать "extends B" из строки //2 и добавить реализацию метода fun в класс C
Убрать "implements Inter<Boolean>" из строки //2
Объяснение:

Код не компилируется, так как класс не может реализовывать два _различных_ варианта _параметризованного_ интерфейса, в данном случае это Inter<String> и Inter<Boolean>.
Вариант Убрать "implements Inter<String>" из строки //1 - тоже не подходит, так как в этом случае в классе C должен быть метод fun, возвращающий Boolean, но в классе B уже есть метод с такой сигнатурой, возвращающий String.

Что выведется на экран:
public class Test1 { 
   int x = 0; 
   void move(int dx) { x += dx; } 
 
   int getX() { 
       return x; 
   } 
 
   public static void main(String[] args) throws Exception { 
       Child test1 = new Child(); 
       test1.move(1); 
       System.out.println(test1.getX()); 
   } 
} 
 
class Child extends Test1 { 
   float x = 0.0f; 
   void move(int dx) { 
       move((float) dx); 
   } 
   void move(float dx) { 
       x += dx; 
   } 
   float getX() { 
       return x; 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Не выполняется условие переопределения поскольку возвращаемые типы не равны.

Каким будет результат выполнения следующего кода:
class Parent { 
    int x = 0; 
    public void printX() { 
         System.out.println(x); 
    } 
} 
 
public class Child extends Parent { 
   int x = -1; 
   public static void main(String... args) { 
       new Child().printX(); 
   } 
}  
Ваши ответы
0
Объяснение:

Метод printX выводит на экран значение переменной Parent.x, а не Child.x, вот если бы этот метод был переопределен в классе Child, тогда бы он вывел "-1"

Каким будет вывод после выполнения данной программы?
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
Что произойдет в результате компиляции и выполнения кода:
01: abstract class A { 
02:     int a = 8; 
03:     public A() { show(); } 
04:     abstract void show(); 
05: } 
06:  
07: class B extends A { 
08:     int a = 90; 
09:     void show() { System.out.println("" + a); } 
10:  
11:     public static void main(String args[]) { 
12:         new B(); 
13:     } 
14: } 
Ваши ответы
Возникнет ошибка компиляции
Объяснение:

При вызове метода show из конструктора базового класса, поле a еще не будет проинициализировано