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

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

+50

  • Кто проходил: ilya201177
  • Дата прохождения: 03.02.2019
Что будет выведено в результате выполнения кода:
public class test  
{   static void f(int a) 
    { 
       System.out.println("int"); 
    } 
 static  void f(Integer a) 
  { 
      System.out.println("Integer"); 
  } 
static   void f(Object a) 
   { 
      System.out.println("Object"); 
   } 
   static public void main(String[] args) 
  {     
      Object i = new Integer(10); 
      f(i); 
  } 
 
} 
Ваши ответы
Объяснение:

Обьяснение 1. Вариант с "int" отпадает так как в метод была передана ссылка, а не примитивный тип данных, далее можно заметить что статический метод f не переопределен, а перегружен, значит выбирается метод, основываясь на типе ссылки(Object) , а не на типе обьекта(Integer)

Какой будет результат компиляции и выполнения следующего кода?
class Base { 
  static { 
       System.out.println("Static"); 
  } 
  public Base(String s) { 
       System.out.println("Base " + s); 
  } 
} 
 
class Sub extends Base { 
   private final String Str = "Constructor"; 
   public Sub() { 
       super(Str); 
       System.out.println("Sub " + Str); 
   } 
 
   public static void main(String...args) { 
       Base B = new Sub(); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

В качестве аргумента при вызове конструктора суперкласса нельзя передавать нестатические поля класса, результат выполнения нестатического метода или ссылку this.

Что будет напечатано на экран в результате компиляции и выполнения кода?
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()); 
   } 
} 
Ваши ответы
a test B
Объяснение:

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

Каким будет результат компиляции и выполнения следующего кода?
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

Что выведет следующий код ?
public class Clazz{ 
 int x = 2; 
 public int getX(){ 
   return x; 
 } 
 public static void main(String[] args){ 
   Clazz c = new SubClass(); 
   System.out.println(c.x + " " + c.getX()); 
 } 
} 
 
class SubClass extends Clazz{ 
 int x = 1; 
 public int getX(){ 
   return x; 
 } 
} 
Ваши ответы
2 1
Каким будет результат компиляции и выполнения данного кода:
class Point { 
  int getX() { return x; } 
 
  int y = getX(); 
  int x = 3; 
 
  public static void main (String s[]) { 
     Point p = new Point(); 
     System.out.println(p.x + "," + p.y); 
  } 
}  
Ваши ответы
3,0
Объяснение:

При инициализации переменной y был использован результат метода
getX(), который вернул значение по умолчанию переменной x, то есть 0. Затем переменная x получила значение 3.

Какая первая строка в этой программе станет причиной ошибки компиляции:
class MyClass { 
 public static void main(String[] args) { 
   MyClass a; 
   MySubclass b; 
 
   a = new MyClass();             // (1) 
   b = new MySubclass();          // (2) 
 
   a = b;                         // (3) 
   b = a;                         // (4) 
 
   a = new MySubclass();          // (5) 
   b = new MyClass();             // (6) 
 } 
} 
class MySubclass extends MyClass { } 
Ваши ответы
4
Каким будет результат компиляции и выполнения следующего кода?
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{ 
 
} 
Ваши ответы
Ошибка выполнения в строке 2