среда, 30 октября 2013 г.

Java (по мотивам собеседований)

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


  1. Множестенное наследие, но для интерфейсов


  2. interface Interface1 {
    void method1();
    }
    view raw voidInterface1 hosted with ❤ by GitHub
    interface Interface2 {
    void method2();
    }
    view raw voidInterface2 hosted with ❤ by GitHub
    В голову вбил, что в java нет множестенного наследования, и для объектов это действительно так.
    Но вот для интерфейса вполне правомерно написать:

    interface Interface3 extends Interface1, Interface2 {
    void method3();
    }
    view raw voidInterface3 hosted with ❤ by GitHub
    Для тестирования простой класс:

    class TestMultipleInterfaces implements Interface3 {
    public static void main(String[] args) {
    new TestMultipleInterfaces();
    }
    public void method1() {
    System.out.println("Method1 works!");
    }
    public void method2() {
    System.out.println("Method2 works!");
    }
    public void method3() {
    System.out.println("Method3 works!");
    }
    public TestMultipleInterfaces() {
    System.out.println("Constructor!");
    method1();
    method2();
    method3();
    }
    }
  3. Одинаковые названия метода и конструктора

  4. class Test {
    public static void main(String[] args) {
    new Test().Test();
    }
    public void Test() {
    System.out.println("Method works!");
    }
    }
    Сигнатуры-то разные

    Compiled from "Test.java"
    class Test {
    Test();
    public static void main(java.lang.String[]);
    public void Test();
    }
Примеры компилируются, и выполняются без ошибок.