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

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

+5

  • Кто проходил: glazko1
  • Дата прохождения: 12.03.2019
В каких случаях выпадает 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
Что будет выведено на экран?
interface I1{ 
   final int p = 10; 
   public int get(); 
 
} 
 
class B implements I1{ 
   private int p = 20;     
   public int get() {     
       return p; 
   } 
} 
 
class C extends B implements I1{         
   public int get() {     
       return p; 
   } 
} 
 
public class A{ 
 
   public static void main(String...args){ 
       B obj = new C();         
       System.out.print(obj.get()); 
 
   } 
} 
Ваши ответы
20
Объяснение:

Переменная р объявлена как private, поэтому она не унаследуется в классе С.

Какой результат выполнения данной части кода?
public class TestMe { 
   public static Integer variable = 1; 
 
   public static void main(String[] args) { 
       System.out.println(new TestMeOneMoreTime().variable); 
   } 
 
} 
 
class TestMeOneMoreTime extends TestMe { 
   public static Integer variable = 2; 
}
Ваши ответы
Ошибка компиляции
Что произойдёт в результате выполнения даного кода:
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(); 
   } 
} 
Ваши ответы
Вывод: int constructor String constructor (String, int) constructor constructor without parameters leavesCount = 50000 treeName = huge tree
Объяснение:

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

Что будет выведено на экран в результате компиляции и выполнения следующего кода?
public class Test { 
 
   static class A { 
       public String str; 
   } 
   static class B1 extends A { 
       public String str; 
   } 
   static class B2 extends A { 
       public int str;                    // 1 
   } 
   static void m(A a) { 
       a.str = "string"; 
   } 
   public static void main(String[] args) throws Exception {  
       A a = new A(); 
       B1 b1 = new B1(); 
       B2 b2 = new B2(); 
 
       m(a); 
       m(b1); 
       m(b2);                            // 2 
 
       System.out.println(a.str); 
       System.out.println(b1.str); 
       System.out.println(b2.str);        // 3 
   }  
}
Ваши ответы
Ошибка компиляции в строке // 1
Объяснение:

Классы B1 и B2 расширяют класс A и перекрывают его публичную переменную 'str' своими переменными, но оригинальное поле продолжает существовать. При обращении к объекту любого из этих классов по ссылке типа A, обращение происходит к полю 'str' класса A. А при обращении по ссылке B1 или B2 - к перекрывающему полю.

Какие независимые изменения можно сделать в следующем фрагменте кода, чтобы он компилировался (укажите все подходящие варианты)?
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
Добавить реализацию метода fun() в класс C
Объяснение:

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

В какой строке может возникнуть ошибка при компиляции следующего кода?
class T { 
   public T() { //1 
   } 
   public void T(){ //2 
   } 
   final static int T=5; //3 
       char T='d'; //4 
   public class T{ //5 
   } 
}
Ваши ответы
2
Какие фрагменты кода будут компилироваться?
interface Base { 
   boolean m1(); 
   byte m2(short s); 
} 
Ваши ответы
interface Base2 implements Base {} 
class Class2 implements Base { 
   boolean m1() { return false; } 
   byte m2(short s) { return 42; } 
} 
Объяснение:

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

Каким будет результат выполнения следующего кода:
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(); 
   } 
}  
Ваши ответы
-1
Объяснение:

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

Каким термином лучше всего описать отношение между классами Department и Employee:
public class Department { 
   private int departmentId; 
   private Set<Employee> employees; 
} 
 
public class Employee { 
   private int employeeId; 
   private String employeeName; 
} 
Ваши ответы
Композиция
Объяснение:

Композиция описывает сильное отношение между объектами (синоним - "состоит из"): один объект является неотъемлемой частью другого. Агрегация же описывает более слабое отношение (синоним - "содержит").