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

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

+41

  • Кто проходил: Serjkee
  • Дата прохождения: 05.04.2019
Что <u>позволяет</u> реализовать множественное наследование в Java?
Ваши ответы
интерфейсы
Общее поведение супер класса может быть передано подкласу с помощью ключевого слова:
Ваши ответы
extends
Что выведет следующий код ?
class Parent{ 
   static int x = 1; 
   public Parent(){ 
       x += 2; 
   } 
} 
class Child extends Parent{ 
   public Child(){ 
       x += 1; 
   } 
 
   public static void main(String[] args) { 
       Child c = new Child(); 
       System.out.println(x); 
   } 
} 
Ваши ответы
4
Что выведется на экран:
public class Test1 { 
   int x = 0; 
   void move(int dx) { x += dx; } 
 
   int getX() { 
       return x; 
   } 
 
   public static void main(String[] args) throws Exception { 
       Child test1 = new Child(); 
       test1.move(1); 
       System.out.println(test1.getX()); 
   } 
} 
 
class Child extends Test1 { 
   float x = 0.0f; 
   void move(int dx) { 
       move((float) dx); 
   } 
   void move(float dx) { 
       x += dx; 
   } 
   float getX() { 
       return x; 
   } 
} 
Ваши ответы
Ошибка компиляции
Объяснение:

Не выполняется условие переопределения поскольку возвращаемые типы не равны.

Абстрактный класс и интерфейс - это типы с абстрактным контрактом. Тем не менее между ними имеются существенные различия.<br><br> Какие из следующих утверждений верны для Java 8 ?
Ваши ответы
В отличие от классов, множественное наследование интерфейсов допускается.
Абстрактный класс может содержать protected и static члены, а интерфейс нет.
Что выдаст следующий код?
class Tochka { 
   int x,y; 
   Tochka() { 
       System.out.println("Tochka created!"); 
   } 
   Tochka(int x,int y) { 
       this.x=x; 
       this.y=y; 
       System.out.println("Tochka created and signed!"); 
   } 
   public String name(){ 
       return "_Tochka"; 
   } 
} 
class Tochka3D extends Tochka { 
   int z; 
   Tochka3D(int x,int y,int z) { 
       super(x,y); 
       this.z=z; 
       System.out.println("Tochka3D created!"); 
   } 
   public String name(){ 
       return z+"_Tochka3D"; 
   } 
} 
 
public class MyFirst { 
   static public void main(String[] args) { 
       Tochka3D tochkaOne = new Tochka3D(1,2,3); 
       Tochka tochkaTwo = tochkaOne; 
       System.out.println(tochkaTwo.name()); //1 
   } 
} 
Ваши ответы
Tochka created and signed!
Tochka3D created!
3_Tochka3D
Объяснение:

Так как переменная суперкласса может ссылаться на объект подкласса, то ей доступны все методы подкласса, которые были доступны и суперклассу, даже если они были переопределены. В нашем случае это метод name(), который выводит название подкласса "_Tochka3D".

Какие операции со ссылочными переменными в теле метода main() не приведут к ошибке компиляции?
class A {} 
class B extends A {} 
class C extends B {} 
public class MyClass { 
   public static void main (String args[]) { 
       A x1 = new A(); 
       B x2 = new B(); 
       C x3 = new C();} 
} 
Ваши ответы
x2 = x3;
x1 = x3;
x1 = x2;
Какой код можно вставить в строку 1 без ошибки компилятора?
class Small{ 
   Number growUp(){ 
       System.out.println("I'm big now"); 
       return 5; 
   } 
} 
class Medium extends Small{ 
   //1 
}
Ваши ответы
protected Number growUp(){ System.out.println("I'm small"); return 5; }
public Integer growUp(int f){ System.out.println("I'm not so big"); return 5; }
protected Float growUp(float f){ System.out.println("I want to be bigger"); return 5f; }
Объяснение:

protected Number growUp(){ System.out.println("I'm small"); return 5; } - сигнатуры методов совпадают, область видимости не сужается, всё хорошо;
public Integer growUp(int f){ System.out.println("I'm not so big"); return 5; } - другой набор аргументов. Метод _не перегружается_, но создаётся новый.
private Number growUp(){ System.out.println("I want to be big"); return 5; } - при переопределении нельзя сужать область видимости.
protected Float growUp(float f){ System.out.println("I want to be bigger"); return 5f; } - снова другой набор параметров.

Что будет в результате компиляции и выполнения данного кода?
class Vehicle { 
   public void printSound() { 
       System.out.print("vehicle"); 
   } 
} 
 
class Car extends Vehicle { 
   public void printSound() { 
       System.out.print("car"); 
   } 
} 
 
class Bike extends Vehicle { 
   public void printSound() { 
       System.out.print("bike"); 
   } 
} 
 
public class Test { 
   public static void main(String[] args) { 
       Vehicle v = new Car(); 
       Bike b = (Bike) v; 
 
       v.printSound(); 
       b.printSound(); 
   }    
} 
Ваши ответы
Ошибка компиляции
Какие независимые изменения можно сделать в следующем фрагменте кода, чтобы он компилировался (укажите все подходящие варианты)?
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.