В данной статье мы рассмотрим популярные вопросы на собеседовании на позицию Junior Java Developer.

Последнее обновление статьи: 26 августа 2019

Что такое класс?

В Java класс – это шаблон, по которому в процессе выполнения программы создаются объекты. В классе описываются данные (поля класса) и поведение (методы класса). Для описания класса используются модификаторы доступа, имя класса, зарезервированное слово class, тело класса, обрамляющееся фигурными скобками {}.

Взглянем на объявление класса HelloWorld:

public class HelloWorld {
    private static String message = "Hello World!";
    public static void main(String[] args) {
        System.out.println(message);
    }
}

Здесь класс HelloWorld объявлен с модификатором доступа public (к нему можно получить доступ из любого пакета), у него есть поле message и метод main.

Что такое объект?

Объект в Java – это экземпляр класса, который создаётся во время исполнения программы. Для создания объекта нужно воспользоваться ключевым словом new:

Date now = new Date();

Виртуальная машина Java, встретив инструкцию new, создаст новый экземпляр указанного класса.

Что такое интерфейс?

Интерфейс в Java – это ссылочный тип, который, в отличие от класса, не может быть инстациирован. Интерфейс – абстракция поверх какого-либо класса, которые реализует данный интерфейс и который может иметь свои экземпляры.

Интерфейс может иметь константные поля (т.е. поля с модификаторамиpublic final), абстрактные методы, статические методы и дефолтные методы (начиная с Java 8).

Пример определения интерфейса:

public interface Animal {
    String TYPE = "ANIMAL";

    String name();

    static int getCount() {
        return 1;
    }

    default String sayHello() {
        return "Hello";
    }
}

Здесь мы определили интерфейс Animal со следующими свойствами:

  • Константное поле TYPE. Все поля интерфейса по умолчанию имеют модификаторы public static final, поэтому их указывать в коде необязательно.
  • Абстрактный метод name. Абстрактные методы не содержат своего тела, поэтому их потребуется определить в классе, который будет реализовывать (наследовать) данный интерфейс.
  • Статический метод getCount. До Java 8 статические методы были единственнымы методами с телом. Так как метод статический, его невозможно переопределить в классе-наследнике.
  • Метод по умолчанию или Дефолтный метод – метод интерфейса, который имеет реализацию по умолчанию. Класс-наследник может переопределить поведение такого метода. Это нововведение было реализовано в Java 8.

Что такое абстрактный класс?

Абстрактный класс – это класс, который нельзя инстанциировать (объекты которого нельзя создать). Абстрактный класс может содержать обычные методы и абстрактные методы (методы без тела). Для того, чтобы объявить класс или метод абстрактным, используется ключевое слово abstract:

public abstract class Person {

    public abstract String getName();

    public String sayHello() {
        return "Hello";
    }
}

Здесь мы определили абстрактный класс Person c двумя методами:

  • Абстрактный метод getName. Так как он не содержит собственного поведения, его потребуется переопределить классом-наследником.
  • Метод sayHello. Это обыкновенный метод с телом, который можно при необходимости переопределить в наследнике (но это не является обязательным правилом).

Что такое наследование?

Наследование – один из базовых принципов объектно-ориентированного программирования. Наследование – это создание нового типа, расширяющего базовый тип. В Java возможно наследование от класса или от интерфейса.

Вопросы на собеседовании Junior