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

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

+63

  • Кто проходил: ilya201177
  • Дата прохождения: 24.01.2019
Каким будет результат выполнения данного кода? (выберите все правильные варианты)
public class Main 
{ 
public static void main(String[] args) 
{ 
int i = 2/3; //1 
System.out.println(i); 
 
} 
static 
{ 
int i = 12; //2 
System.out.println( i+100); 
} 
 
}
Ваши ответы
112
0
Какие из следующих утверждений истинные?
Ваши ответы
не статический метод не может быть вызван из статического без указания экземпляра класса
Какой результат компиляции и выполнения программы?
public class Okey implements A.B{ 
   interface C{ 
       void stop(); 
   } 
   public int goTo(){ 
          System.out.println("Идем гулять в парк"); 
      return 5; 
   } 
   public static void main(String[] args) { 
               Okey o=new Okey(); 
       o.goTo(); 
   } 
} 
interface A{ 
   void go(); 
   interface B{ 
       int goTo(); 
   } 
}
Ваши ответы
Идем гулять в парк
Каков результат выполнения следующего кода:
class A implements Cloneable{ 
   public int i=10; 
   @Override 
   public A clone() throws CloneNotSupportedException { 
       return (A) super.clone(); 
   } 
} 
 
class B extends A implements Cloneable{ 
   public int i=20; 
   @Override 
   public B clone() throws CloneNotSupportedException { 
       A cloneA = super.clone(); 
       B cloneB = (B) cloneA;                        
       System.out.print(cloneB.i+" "); 
       return cloneB; 
   } 
} 
 
public class MyClass { 
   public static void main(String[] args) throws CloneNotSupportedException { 
       B b = new B(); 
       A a = b.clone(); 
       System.out.println(a.clone().i); 
   } 
} 
Ваши ответы
20 20 10
Объяснение:

Правильный ответ: 20 20 10. Т.к. класс B переопределяет метод clone, то в обоих случаях будет вызван именно он. Однако, не смотря на то, что метод clone класса B возвращает в качестве результата экземпляр класса B, данный результат будет не явно преобразован к классу A, т.к. переменная a имеет тип A.

Каким будет результат компиляции и выполнения следующего кода?
class Go extends A { 
     public static  void main(String[] args)  { 
        new Go().start(); 
     } 
 
   private void start() { 
      check(new A(), new Go()); 
      check((Go)new A(), new Go());  
   } 
 
   private void check(A a, A a1) { 
       Go go = (Go) a;  // 1 
       A a2 = (A) a1;   //  2 
   }   
} 
 
class A{ 
 
} 
Ваши ответы
Ошибка выполнения в строке 1
Каким будет результат выполнения данного кода?
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.

Что напечатает следующий код:
class Y { 
 public Y() { System.out.print("Y"); } 
} 
class Z { 
 public Z() { System.out.print("Z"); } 
} 
class X extends Z { 
 private Y m_objY = new Y(); 
 public X() { System.out.print("X"); } 
 
 public static void main(String[] args) { 
     X x = new X(); 
 }  
} 
Ваши ответы
ZYX
Объяснение:

Согласно JLS #12.5, объект инициализируется в следующем порядке:
1. Инициализируется суперкласс.
2. Инициализируются поля и выполняются инициализационные блоки, в порядке следования.
3. Выполняется оставшееся тело дочернего конструктора.
При этом, инициализация суперкласса происходит аналогичным образом.

Что выведется на экран:
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; 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

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

Каким будет результат компиляции и выполнения следующего кода?
public class Go {  
 public static void main(String[] args) { 
   System.out.print(C.x); 
 }  
}  
 
class A { 
 static {  
   System.out.print("A"); 
 }        
}   
class B extends A{ 
 public static int x = 5;  
 static { 
   System.out.print("B"); 
 }  
}  
class C extends B{ 
 static {  
   System.out.print("C");  
   System.exit(0); 
 } 
}
Ваши ответы
AB5
Объяснение:

Класс С не будет загружаться, то есть статический блок в классе С не будет выполняться! Почему?
Загрузка класса выполнятся в таких условиях:
Обращение к СТАТИЧЕСКИМ ПЕРЕМЕННЫМ КЛАССА, статическому методу, создание объекта данного класса и тд..
В данном случае мы обращаемся ИМЕННО К СТАТИЧЕСКОЙ ПЕРЕМЕННОЙ КЛАССА B но не к статической переменной класса С - C.x - данная запись конечно критична, но жизнеспособна.
Исходя от этого мы делаем вывод:
1) Статическая переменная x принадлежит классу B, но так как B extends A - то самым первым выполнится статический блок в классе A
2) Выполнение статического блока в классе B
3) Ну и вывод - AB5

В каких случаях выпадает ClassCastException, указать все возможные варианты.
class Go {  
     public static void main(String[] args) { 
         A a = new A();  
         Single s = new Single(); 
         Double d = new Double(); 
         d = (Double)a; // 1  
         d = (Double)s; // 2  
         s = (Single)a; // 3  
         s = (Single)d; // 4 
         a = (A)d; // 5  
         a = (A)s; // 6  
         } 
         }  
 class A{  
 
 } class Single extends A{  
 
 } class Double extends Single{ 
 
 } 
Ваши ответы
1
2
3