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

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

+37

  • Кто проходил: ilya201177
  • Дата прохождения: 24.01.2019
Какие классы скомпилируются ?
abstract interface IClazz{ 
   int doSmth(String s); 
} 
 
abstract class X implements IClazz{ 
 
} 
 
private abstract class Y implements IClazz{ 
 
} 
 
class Z implements IClazz{ 
   int doSmth(String s){ 
       return 0; 
   } 
} 
Ваши ответы
X
Объяснение:

Класс Y не компилируется, поскольку private не допускается.
Класс Z не компилируется, потому что метод doSmth() в интерфейсе имеет модификатор public, а в классе Z - модификатор по-умолчанию, что является сужение области видимости и не допускается.
Класс X компилируется. Методы, объявленные в суперинтерфейсе и не реализованные в классе, считаются абстрактными методами этого класса.

Что произойдет в результате компиляции и выполнения следующего кода:
public class Overload { 
   public static void main(String[] args) { 
       Test t=new Test(); 
       t.clone(); 
       System.out.println(t.i); 
   } 
} 
class Test{ 
   int i; 
   public clone(){ 
       i=15; 
   } 
}
Ваши ответы
Ошибка компиляции
Объяснение:

clone() - метод класса Object. Во-первых, все наименования методов класса Object являются зарезервированными словами, и определять свой собственный метод, название которого будет одим из этих слов - нельзя. Во-вторых, сигнатура метода не соотвествует clone() из Object.

Как называется "интерпретация ссылки на объект как ссылки на базовый тип"?
Ваши ответы
Восходящее преобразование
Выберите единственный верный результат компиляции и выполнения кода.
class Base { 
       Base(int i) { 
            System.out.println("Base"); 
       } 
} 
class Derived extends Base { 
       public static void main(String[] argv) { 
             Derived d = new Derived(); 
       } 
       void Derived() { 
             System.out.println("Derived"); 
       } 
} 
Ваши ответы
Ошибка компиляции.
Что будет выведено в результате выполнения данного кода ?
public class Main { 
   public static void main(String[] args) { 
       new ExampleClass2().getVersion(); 
   } 
} 
 
class ExampleClass1 { 
   private String version = "current version: 0.1a"; 
   private void getVersion() { 
       System.out.println(version); 
   } 
} 
 
class ExampleClass2 extends ExampleClass1 { 
   private String version = "current version: 0.5b"; 
   @Override 
   public void getVersion() { 
       System.out.println(version); 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

@Override - является аннотацией, которая сообщает компилятору о том, что метод (идущий за аннотацией) перекрывает метод супер класса. Он является необязательным, но в данном случае его использование вызовет ошибку компиляции т.к. метод getVersion() в классе ExampleClass1 объявлен как private и соответственно метод getVersion() в классе ExampleClass2 его не перекрывает.

Следующие два класса находятся в пакете <b>points</b>:
package points; 
 
public class Point { 
   int x; 
   public void move(int dx) { 
       x += dx; 
   } 
} 
 
package points; 
 
public class Point2d extends Point { 
   int y; 
   public void move(int dx, int dy) { 
       x += dx; 
       y += dy; 
   } 
} 
 
 
Класс Point3d находится в другом пакете:
import points.Point2d; 
 
class Point3d extends Point2d { 
   int z; 
   public void move(int dx, int dy, int dz) { 
       x += dx; 
       y += dy; 
       z += dz; 
   } 
} 
 
Какое из следующих утверждений верно?
Ваши ответы
При компиляции возникнет ошибка в классе Point3d.
Объяснение:

Поле x класса Point, а также поле y класса Point2d, не имеют явного модификатора видимости, а значит по умолчанию видны только внутри пакета (видимость package-private). Значит из другого пакета они видны не будут.

Скомпилируется ли следующий код ?
class A{  
     public Single method(){ 
         return new Single();  
         } 
     } 
 
 class Single extends A{ 
     public A method() { 
         return new Single(); 
         }  
     } 
Ваши ответы
Нет
Каким будет вывод после выполнения данной программы?
class A { } 
class B extends A { } 
abstract class C { 
   abstract void doAction(A a); 
   void start(A a){ 
       doAction(a); 
   } 
} 
class D extends C { 
   void doAction(A a) { 
       System.out.println("A action"); 
   } 
   void doAction(B b) { 
       System.out.println("B action"); 
   } 
} 
public class Test { 
   public static void main(String[] args) { 
       new D().start(new B()); 
   } 
} 
Ваши ответы
A action
Каков результат выполнения следующего кода:
class A implements Cloneable{ 
   public int i=10; 
   @Override 
   public A clone() throws CloneNotSupportedException { 
       return (A) super.clone(); 
   } 
} 
 
class B extends A implements Cloneable{ 
   public int i=20; 
   @Override 
   public B clone() throws CloneNotSupportedException { 
       A cloneA = super.clone(); 
       B cloneB = (B) cloneA;                        
       System.out.print(cloneB.i+" "); 
       return cloneB; 
   } 
} 
 
public class MyClass { 
   public static void main(String[] args) throws CloneNotSupportedException { 
       B b = new B(); 
       A a = b.clone(); 
       System.out.println(a.clone().i); 
   } 
} 
Какой код можно вставить в строку 1 без ошибки компилятора?
class Small{ 
   Number growUp(){ 
       System.out.println("I'm big now"); 
       return 5; 
   } 
} 
class Medium extends Small{ 
   //1 
}