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

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

+15

  • Кто проходил: Bruis Biggan
  • Дата прохождения: 15.03.2019
Какой будет результат компиляции и выполнения кода?
public class Parent { 
   private void whoAreYou(){ System.out.println("I'm parent"); } 
 
   public static void main(String []args){ 
       Parent p = new Child(); 
       p.whoAreYou(); 
   } 
} 
 
class Child extends Parent { 
   public void whoAreYou(){ System.out.println("I'm child"); } 
} 
Ваши ответы
I'm parent
Каким термином лучше всего описать отношение между классами Department и Employee:
public class Department { 
   private int departmentId; 
   private Set<Employee> employees; 
} 
 
public class Employee { 
   private int employeeId; 
   private String employeeName; 
} 
Ваши ответы
Агрегация
Объяснение:

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

Какая первая строка в этой программе станет причиной ошибки компиляции:
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
Что произойдет в результате компиляции и выполнения кода:
01: abstract class A { 
02:     int a = 8; 
03:     public A() { show(); } 
04:     abstract void show(); 
05: } 
06:  
07: class B extends A { 
08:     int a = 90; 
09:     void show() { System.out.println("" + a); } 
10:  
11:     public static void main(String args[]) { 
12:         new B(); 
13:     } 
14: } 
Ваши ответы
Возникнет ошибка компиляции
Объяснение:

При вызове метода show из конструктора базового класса, поле a еще не будет проинициализировано

Каким будет результат компиляции и выполнения данного кода:
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 = 5
i = 5
Объяснение:

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

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

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

Что напечатает следующий код:
class SuperBase { 
   public int i = 3; 
   public void mm(Object o) { 
       System.out.println("Object  " + i); 
   } 
   public void mm(String o) { 
       System.out.println("String  " + i); 
   } 
} 
 
public class Base extends SuperBase { 
   public Base() { 
       i = 5; 
   } 
   public static void main(String[] args) { 
       SuperBase sb = new Base(); 
       Object o = ""; 
       sb.mm(o); 
       sb.mm(""); 
   } 
} 
Ваши ответы
Объяснение:

Конструктор Base (который вызывается ПОСЛЕ конструктора SuperBase) перезаписывает поля. Если вынести i = 5 из конструктора и поместить как поле в классе Base, то отобразится именно 3, а не 5.

Есть код:
interface Square{ 
   double square(); 
} 
interface Perimeter{ 
   double perimeter(); 
} 
public class Overload { 
 
   public static void main(String[] args) { 
       Square s=new Circle(5); 
   } 
} 
 
class Circle implements Square, Perimeter{ 
   double r; 
   Circle(double r){ 
       this.r=r; 
   } 
   public double perimeter() {     
       return 2*Math.PI*r; 
   } 
 
   public double square() { 
       return Math.PI*r*r; 
   } 
 
}
С помощью какого кода можно посчитать периметр круга?(выберите один или более вариантов)
Ваши ответы
s.perimeter();
Даны следующие классы:
class Parent { } 
class DerivedOne extends Parent { } 
class DerivedTwo extends Parent { } 
Выберите единственное верное высказывание
о следующем блоке кода: Parent p = new Parent(); 
DerivedOne d1 = new DerivedOne(); 
DerivedTwo d2 = new DerivedTwo(); 
d1 = (DerivedOne)d2; 
Ваши ответы
Исключение ClassCastException.
Объяснение:

Animal a = new Animal(); Cat c = new Cat(); Dog d = new Dog(); c = (Cat)d; // Ошибка компиляции. Кошка не может быть собакой. Если бы было: Animal a = new Animal(); Animal c = new Cat(); Animal d = new Dog(); c = (Cat)d; // то - ClassCastException, т.к. О том, что d - это собака, компилятор не знает. Это обнаружится во врямя выполнения и выкинется исключение