Ключевое слово non-sealed
Ключевое слово non-sealed применяется вместе с sealed и разрешает
наследнику sealed-класса или sealed-интерфейса снова стать открытым для
наследования. Обычно его указывают в объявлении класса или интерфейса,
который наследует или реализует sealed-родителя. После этого от такого
класса можно свободно наследоваться без дополнительных разрешений
permits. Ключевое слово пишется перед именем класса или интерфейса:
non-sealed class Child extends Parent.
Синтаксис
non-sealed class Child extends Parent
{
}
non-sealed interface ChildInterface extends ParentInterface
{
}
Пример
Давайте объявим sealed-класс Shape и его наследника
Circle, помеченного как non-sealed. Затем свободно
унаследуемся от Circle:
public class Main
{
public static void main(String[] args)
{
BigCircle bigCircle = new BigCircle();
bigCircle.print();
}
}
sealed class Shape permits Circle
{
}
non-sealed class Circle extends Shape
{
}
class BigCircle extends Circle
{
public void print()
{
System.out.println("BigCircle");
}
}
Результат выполнения кода:
"BigCircle"
Пример
Давайте объявим sealed-интерфейс Animal, а его наследника
Dog пометим как non-sealed. После этого создадим
класс Puppy, который свободно реализует Dog:
public class Main
{
public static void main(String[] args)
{
Puppy puppy = new Puppy();
puppy.sound();
}
}
sealed interface Animal permits Dog
{
}
non-sealed interface Dog extends Animal
{
}
class Puppy implements Dog
{
public void sound()
{
System.out.println("Woof");
}
}
Результат выполнения кода:
"Woof"
Смотрите также
-
ключевое слово
sealed,
которое ограничивает наследование класса -
ключевое слово
permits,
которое задает список разрешенных наследников -
ключевое слово
extends,
которое выполняет наследование класса -
ключевое слово
implements,
которое реализует интерфейс