[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-11-25-chto-takoe-sealed-classes-i-sealed-interfaces":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},402,"chto-takoe-sealed-classes-i-sealed-interfaces",11,"java-11-25","Java 11–25","🆕","Что такое Sealed Classes и Sealed Interfaces?","Sealed Classes (запечатанные классы) — механизм ограничения набора классов, которые могут наследоваться от данного класса или реализовывать интерфейс. Это позволяет компилятору знать все возможные подтипы и проверять полноту switch-выражений.\n\n> **Аналогия из жизни:** sealed class — как закрытый клуб с фейс-контролем: только перечисленные в списке (permits) могут войти, и охранник (компилятор) гарантирует, что никто посторонний не проникнет.\n\n\u003Cdetails>\u003Csummary>Пример: sealed interface и exhaustive switch\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Запечатанный интерфейс — только перечисленные классы могут его реализовать\npublic sealed interface Shape\n    permits Circle, Rectangle, Triangle {\n}\n\npublic record Circle(double radius) implements Shape {}\npublic record Rectangle(double width, double height) implements Shape {}\npublic final class Triangle implements Shape {\n    private final double a, b, c;\n    \u002F\u002F ...\n}\n\n\u002F\u002F Exhaustive switch (компилятор проверяет полноту)\npublic double area(Shape shape) {\n    return switch (shape) {\n        case Circle c    -> Math.PI * c.radius() * c.radius();\n        case Rectangle r -> r.width() * r.height();\n        case Triangle t  -> calculateTriangleArea(t);\n        \u002F\u002F default не нужен — компилятор знает все подтипы!\n    };\n}\n```\n\n\u003C\u002Fdetails>\n\n### Модификаторы наследников\n\n| Модификатор | Поведение |\n|-------------|-----------|\n| `final` | Нельзя наследоваться далее |\n| `sealed` | Можно, но с ограничением (свой `permits`) |\n| `non-sealed` | Снять ограничение, любой может наследоваться |\n\n```java\npublic sealed class Animal permits Dog, Cat, Fish {}\npublic final class Dog extends Animal {}\npublic sealed class Cat extends Animal permits Persian, Siamese {}\npublic non-sealed class Fish extends Animal {}  \u002F\u002F открыт для наследования\n```\n\n### Частые ошибки\n\n- Забыть `permits` — если наследники в том же файле, `permits` необязателен (Java выведет автоматически)\n- `non-sealed` нарушает гарантии — если один из подтипов `non-sealed`, exhaustive switch невозможен\n- Sealed + Records — records implicitly final, поэтому идеальные кандидаты для sealed\n\n### Как используется в 2026\n\n- Sealed classes + Records + Pattern Matching = алгебраические типы данных (ADT) в Java\n- Широко используется для моделирования доменных событий, состояний, результатов\n- Пример: `sealed interface Result\u003CT> permits Success\u003CT>, Failure\u003CT>` — type-safe обработка результатов\n\n> **На собеседовании:** покажите связку Sealed + Records + Pattern Matching — это главная ценность sealed classes. Интервьюер ожидает, что вы знаете про exhaustive switch без default и три модификатора наследников (final, sealed, non-sealed).","","middle",[15],"java-modern",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое Sealed Classes и Sealed Interfaces? — Gymterview","Sealed Classes (запечатанные классы) — механизм ограничения набора классов, которые могут наследоваться от данного класса или реализовывать интерфейс. Это позво","Sealed Classes (запечатанные классы) — механизм ограничения набора классов, которые могут наследоваться от данного класс",[15,13],"Sealed Classes (запечатанные классы) — механизм ограничения набора классов, которые могут наследоваться от данного класса или реализовывать интерфейс. Это позволяет компилятору знать все возможные подтипы и проверять полноту switch-выражений.",true]