В данной статье мы рассмотрим популярные вопросы на собеседовании на позицию 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 возможно наследование от класса или от интерфейса.