Это ключевые моменты из Programming in Scala, второе издание Мартина Одерски, Лекса Спуна, Билла Веннерса. Я хотел отметить некоторые ключевые моменты. Они могут показаться сломанными и не иметь особого смысла, если вы не читали книгу. Это для личного ознакомления. Не стесняйтесь исправлять меня, если я что-то неправильно интерпретировал в этом посте.
Глава 11. Иерархия Scala
В Scala каждый класс наследуется от общего суперкласса с именем Any. Методы, определенные в Any, являются «универсальными» методами и могут быть вызваны для любого объекта. В конце иерархии Scala определяет Null и Nothing и являются общими подклассами.
11.1 Иерархия классов Scala
- Корневой класс Any имеет два подкласса: AnyVal и AnyRef. AnyVal является родительским классом для каждого встроенного класса значений в Scala.
- Девять классов значений: Byte, Short, Char, Int, Long, Float, Double, Boolean и Unit. Пространство классов значений является плоским, и они имеют неявное преобразование (например, для преобразования Int в Long)
- Первые восемь из них соответствуют примитивным типам Java, и их значения представлены во время выполнения как примитивные значения Java.
- Все экземпляры этих классов написаны как литералы в Scala и определены как абстрактные и окончательные.
- Unit примерно соответствует типу void в Java; он используется как тип результата метода, который иначе не возвращает интересного результата. Единица имеет единственное значение экземпляра, которое записывается ().
- AnyRef — это базовый класс для всех ссылочных классов в Scala. AnyRef — это просто псевдоним для java.lang.Object.
- Классы Scala отличаются от классов Java, поскольку они также наследуют от специальной черты маркера, называемой ScalaObject.
11.2. Как реализованы примитивы
- Scala хранит целые числа так же, как Java: как 32-битные слова. Стандартные операции, такие как сложение или умножение, реализованы как примитивные операции.
- Целые числа типа Int при необходимости прозрачно преобразуются в «упакованные целые числа» java.lang.Integer.
- Методы Scala == проверяют значения, а метод eq также проверяет равенство ссылок.
11.3. Типы нижней части
- scala.Null и scala.Nothing — это специальные типы, которые единообразно обрабатывают некоторые крайние случаи объектно-ориентированной системы типов Scala.
- Класс Null является типом нулевой ссылки и является подклассом каждого ссылочного класса. Null несовместим с типами значений.
- Type Nothing находится в самом низу иерархии классов Scala; это подтип любого другого типа. одно использование Nothing состоит в том, что оно сигнализирует об аварийном завершении.
Заключение
Вышеприведенная суть закладывает хорошую основу для наследования классов в Scala.