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

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

0

  • Кто проходил: ilya201177
  • Дата прохождения: 03.12.2018
Что будет в результате копиляции и выполнения следующего кода?
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
Что произойдёт в результате выполнения даного кода:
public class Tree { 
   int leavesCount; 
   String treeName; 
   Tree (int leaves){ 
       this.leavesCount = leaves; 
       System.out.println("int constructor"); 
   } 
   Tree (String treeName, int leaves){ 
       this(leaves); 
       this(treeName); 
       System.out.println("(String, int) constructor"); 
   } 
   Tree (String treeName){ 
       this.treeName = treeName; 
       System.out.println("String constructor"); 
   } 
   Tree () { 
       this("huge tree", 50000); 
       System.out.println("constructor without parameters"); 
   } 
   void printLeavesCount(){ 
       System.out.println("leavesCount = " + leavesCount + " treeName = " + treeName); 
   } 
   public static void main (String[] args) { 
       Tree tree = new Tree(); 
       tree.printLeavesCount(); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

При вызове одного конструктора через this вызывать второй запрещается

Каким будет результат компиляции и выполнения данного кода:
class Base { 
   private int i = 5; 
 
   public Base() { 
       System.out.println("i = " + getI()); 
   } 
 
   public int getI() { 
       return i; 
   } 
} 
 
public class Test extends Base { 
   private static int i = 10; 
 
   public Test() { 
       System.out.println("i = " + super.getI()); 
   } 
 
   public int getI() { 
       return i; 
   } 
 
   public static void main(String[] args) { 
       Test test = new Test(); 
   } 
} 
Ваши ответы
i = 10
i = 5
Объяснение:

При создании экземпляра класса Test неявно вызывается конструктор суперкласса Base(). В нём происходит вызов метода getI(). Этот метод перекрыт в Test и возвращает i=10. Потом выполняется непосредственно конструктор Test(), в котором происходит вызов метода getI() из суперкласса (Base), который и возвращает i=5.

Каков будет результат его компиляции и выполнения?
class A { 
   public A(String s) { 
       System.out.print("A"); 
   } 
} 
class B extends A { 
   public B() { 
       System.out.print("Empty"); 
   } 
   public B(String s) { 
       System.out.print(s); 
   } 
 
   public static void main(String[] args) { 
       new B("AB"); 
   } 
} 
Ваши ответы
Код не откомпилируется
Объяснение:

Код не скомпилируется, так как в базовом классе отсутствует конструктор по умолчанию.

Что будет в результате компиляции и выполнения данного кода?
class Base { 
   private void fPrivate() { 
       System.out.println("f Private"); 
   } 
 
   public static void fun(Base t) { 
       t.fPrivate(); 
   } 
} 
 
public class Derived extends Base { 
   public static void main(String args[]) { 
       Base a = new Derived();            //1 
       a.fPrivate();                      //2 
       Base.fun(a);                       //3 
   } 
}
Ваши ответы
Ошибка компиляции в строке 2
Какие независимые изменения можно сделать в следующем фрагменте кода, чтобы он компилировался (укажите все подходящие варианты)?
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(); 
} 
Ваши ответы
Убрать "implements Inter<Boolean>" из строки //2
Убрать "implements Inter<String>" из строки //1
Объяснение:

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

Даны интерфейсы:
interface A { 
   Integer a(); 
} 
interface B { 
   Number a(); 
} 
 
Какие фрагменты кода из перечисленных успешно скомпилируются?
Ваши ответы
abstract class C implements A, B { 
} 
class C implements A, B { 
   public Integer a() { 
       return null; 
   } 
   public Number a() { 
       return null; 
   } 
} 
Что будет выведено на экран в результате компиляции и выполнения следующего кода?
public class Test { 
 
   static interface I {         
       void a(Number n); 
   } 
 
   static class A implements I { 
 
       public void a(Number n) { 
           System.out.println("number"); 
       } 
 
       public void a(Double n) { 
           System.out.println("double"); 
       } 
   } 
 
   public static void main(String[] args) {  
 
       I i = new A(); 
       Double d = new Double(12d); 
       i.a(d); 
   }  
}
Ваши ответы
double
Объяснение:

Проверка методов, которые можно вызвать, происходит по типу ссылки, а не объекта, на который она ссылается.

Каков результат выполнения следующего кода:
class Copier<T extends Cloneable> { 
   public T copy(T param) throws CloneNotSupportedException { 
       return  (T) param.clone();                            //1 
   } 
} 
 
class A  implements Cloneable{ 
   public int i=10; 
   @Override 
   public A clone() throws CloneNotSupportedException { 
       return (A) super.clone();                             //2 
   } 
} 
 
class B extends A{ 
   public int i=20; 
} 
 
public class MyClass { 
   public static void main(String[] args) throws CloneNotSupportedException { 
       B b = new B(); 
       Copier<B> copier = new Copier<>();                //3 
       A a = copier.copy(b);                                //4 
       System.out.println(a.i); 
   } 
} 
Ваши ответы
20
Объяснение:

Правильный ответ: Ошибка компиляции в строке 1, т.к. clone() имеет спецификацию доступа protected в Object, и вызывать clone() необходимо через ссылку на класс, который переопределил clone() как public. Но компилятор не может знать переопределил ли Т clone() как public. Если T extends Cloneable заменить на T extends A, то компиляция пройдет без ошибок.

В каких случаях выпадает 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
4