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

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

+63

  • Кто проходил: ilya201177
  • Дата прохождения: 23.01.2019
Каким будет результат работы программы?
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* компилятор находит приватный метод и, зная, что его дальнейшее переопределение невозможно в принципе, вызывает его.

Дан код:
class Building { 
  Building() { System.out.print("b "); } 
  Building(String name) { 
    this();   System.out.print("bn " + name); 
  } 
} 
public class House extends Building { 
  House() { System.out.print("h "); } 
  House(String name) { 
    this();   System.out.print("hn " + name); 
  } 
  public static void main(String[] args) { new House("x "); } 
} 
 
Какой будет результат?
Ваши ответы
b h hn x
Объяснение:

1) Call new House("x ");
2) invoke House(String name) {}; - constructor with argument String ;
3)call this();
4)invoke House(){}; - default constructor
5) call super();
6)always invoke default constructor Building(){}; - execute code and print "b";
7)return to House default constructor - execute code and print "h";
8)return to House constructor with argument String - execute code and print "hn x ", where "x " - paremeter new House("x ");
9)and result "b h hn x ";
Выглядит как цепочка! Очень хороший пример

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

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

Каким будет результат выполнения данного кода?
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 T { 
   public T() { //1 
   } 
   public void T(){ //2 
   } 
   final static int T=5; //3 
       char T='d'; //4 
   public class T{ //5 
   } 
}
Ваши ответы
4
5
Какие фрагменты кода будут компилироваться?
interface Base { 
   boolean m1(); 
   byte m2(short s); 
} 
Ваши ответы
abstract class Class2 implements Base { 
   public boolean m1() { return (true); } 
} 
abstract class Class2 implements Base {} 
Объяснение:

Методы интерфейсов по умолчанию public, следовательно методы класса реализующие методы интерфейсов не должны сужать видимость. Абстрактные классы не обязаны реализовать методы интерфейса.

Скомпилируется ли следующий код ?
class A{  
     public Single method(){ 
         return new Single();  
         } 
     } 
 
 class Single extends A{ 
     public A method() { 
         return new Single(); 
         }  
     } 
Ваши ответы
Нет
Что будет выведено после выполнения следующего кода:
package test; 
 
public class LinkageTest{ 
 
   public static class Parent{ 
 
       public void test(){ 
           System.out.println("parent::test"); 
       } 
   } 
 
   public static class Child extends Parent{ 
 
       public void test(){ 
           System.out.println("child::test"); 
       } 
   } 
 
   public static class Tester{ 
 
       public void test(Parent obj){ 
           System.out.println("Testing parent..."); 
           obj.test(); 
       } 
 
       public void test(Child obj){ 
           System.out.println("Testing child..."); 
           obj.test(); 
       } 
   } 
 
   public static void main(String[] args){ 
       Parent obj = new Child(); 
       Tester t = new Tester(); 
       t.test(obj); 
   } 
} 
Ваши ответы
Testing parent... child::test
Объяснение:

Раннее связывание, выполняемое на этапе компиляции, а позднее - во время исполнения.

Какой результат компиляции и выполнения данного кода?
public class Test { 
   public static void main(String... args) { 
       A a = new C(); 
       a.m1(); 
       a.m2(); 
   } 
} 
 
abstract class A { 
   public void m1() { 
       System.out.println("m1 from A class"); 
   } 
   public abstract void m2(); 
} 
 
abstract class B extends A { 
   public abstract void m1(); 
} 
 
class C extends B { 
   public void m2() { 
       System.out.println("m2 from C class"); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Класс C не реализовывает абстрактный метод m1().
В классе А он реализован,но в классе B он переопределен,как абстрактный,поэтому Ошибка компиляции.