От какого общего класса наследуются числовые классы-обертки в Java (Integer, Long, Double)?

«От какого общего класса наследуются числовые классы-обертки в Java (Integer, Long, Double)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Все числовые классы-обертки (Integer, Long, Double, Float, Short, Byte) наследуются от абстрактного класса java.lang.Number.

Назначение класса Number: Он служит базовым типом для всех числовых оберток и предоставляет абстрактные методы для преобразования значения объекта в примитивные типы.

Сигнатура ключевых методов класса Number:

public abstract class Number {
    public abstract int intValue();
    public abstract long longValue();
    public abstract float floatValue();
    public abstract double doubleValue();
    public byte byteValue() { return (byte) intValue(); } // Реализация по умолчанию
    public short shortValue() { return (short) intValue(); } // Реализация по умолчанию
}

Практический пример использования полиморфизма с Number:

import java.util.ArrayList;
import java.util.List;

public class NumberExample {
    public static void main(String[] args) {
        // Коллекция может хранить разные числовые типы
        List<Number> numbers = new ArrayList<>();
        numbers.add(new Integer(10));   // Integer is-a Number
        numbers.add(new Double(3.14));  // Double is-a Number
        numbers.add(new Long(100L));    // Long is-a Number

        // Обход и преобразование к общему типу double
        double sum = 0.0;
        for (Number num : numbers) {
            sum += num.doubleValue(); // Используем метод из класса Number
        }
        System.out.println("Sum: " + sum); // Вывод: Sum: 113.14
    }
}

Важно: Класс Character и Boolean НЕ наследуются от Number, так как они не представляют числовые значения.