Общие вопросы
Смешанные вопросы по Java.
Открыть разделБаза Hintsage
Язык Java, JVM и экосистема серверной разработки.
Темы раздела
Смешанные вопросы по Java.
Открыть разделБазовая семантика языка, типы, методы, классы и ключевые конструкции.
Открыть разделНаследование, полиморфизм, интерфейсы, классы и разрешение методов.
Открыть разделJava Collections Framework, контракты, реализации и сложность операций.
Открыть разделJava Memory Model, потоки, синхронизация и java.util.concurrent.
Открыть разделЗагрузка классов, память JVM, GC, JIT и диагностика.
Открыть разделПараметризация типов, bounds, wildcards и стирание типов.
Открыть разделФункциональные интерфейсы, streams, collectors и параллельная обработка.
Открыть разделИерархия исключений, обработка ошибок и управление ресурсами.
Открыть разделПрактика
По какой причине конструктор базового класса не может быть переопределён в классе-наследнике?
Разберите, почему объявление C не компилируется, хотя в нём есть метод с совпадающими именем и параметрами:
interface A {
Number value();
}
interface B {
String value();
}
class C implements A, B {
public String value() {
return "ok";
}
}
Что произойдёт, если подкласс объявит экземплярный метод с той же сигнатурой, что статический метод суперкласса?
В перегруженном API обычный метод применим напрямую, а другой кандидат требует преобразования varargs: какой кандидат выберет Java и почему?
В следующем коде объясните, почему вызов A.super.m() не компилируется, хотя B наследует метод от A:
interface A {
default void m() {
System.out.println("A");
}
}
interface B extends A {
}
class C implements B {
void call() {
A.super.m();
}
}
Разберите результат вызова статического метода через null-ссылку: будет ли исключение и какой метод выбирается?
class Logger {
static void ping() {
System.out.println("ping");
}
}
public class Demo {
public static void main(String[] args) {
Logger logger = null;
logger.ping();
}
}
Что позволяет ссылке интерфейсного типа вызывать методы Object, которых интерфейс явно не объявляет?
В проекте объявили sealed-класс: что именно ограничивает список его прямых наследников?
Допустим, объект фактически создан как экземпляр класса, но сохранён в переменной интерфейсного типа: доступен ли через такую переменную публичный метод, которого нет в интерфейсе?
Какие требования к модификатору прямого наследника sealed-класса предотвращают появление неучтённых ветвей наследования?
Почему Java запрещает объявлять перегрузки, различающиеся только параметрами обобщённого типа, например списком строк и списком чисел?
Предскажите поведение уже скомпилированного класса, реализующего интерфейс, в который позже добавили абстрактный метод.
В сервисе метод принимает массив Object, а ему передают массив String; объясните, почему это разрешает компилятор, но запись числа может завершиться исключением.
Сравните причину, по которой Java разрешает классу реализовывать несколько интерфейсов, но запрещает наследоваться от нескольких классов.
Какие последствия для уже скомпилированного класса имеет добавление default-метода в реализуемый им интерфейс?
Вызов перегруженного метода получает лямбда-выражение без явного типа: что определяет, какая перегрузка будет выбрана?
Сохраняется ли модификатор synchronized при переопределении экземплярного метода в классе-наследнике?
При рефлексивном поиске метода в иерархии классов чем отличается использование getDeclaredMethod от getMethod?
Допустимо ли переопределить обобщённый метод базового класса, заменив его параметр типа на конкретный тип?
Какой набор проверяемых исключений может объявить реализация метода, совпадающего с методами двух интерфейсов с разными throws-клаузами?
Показано 101–120 из 403