0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaのsealedクラスについて(JavaSE17Silverレベル)

Posted at

JavaSE17のSliverの学習で覚えにくいところを自分用にSAを作成

sealedクラス

final修飾子で継承できないクラスを定義することで不用意にサブクラスが継承されることは防ぐことができる。

finalの懸念点

(上に空行が必要)

SuperClassを継承しサブクラスAとBを作成する際にfinalで修飾することでサブクラスAとBを継承したサブクラスを作ることを防ぐとことはできる。
しかし新たにSuperClassを継承したCクラスを作成することができてしまい、Cクラスにfinalをつけ忘れるとCクラスを継承したD、E、、、クラスを無限に増殖することができてしまう。

この状況を防ぐためにJava17からsealed classが登場した。

宣言は以下の通り

(上に空行が必要)

public sealed class SuperClass permits A, B {
// something code
}

上記のクラスAとBはfinalsealednon-sealedのいずれかで修飾しなければコンパイルエラーになる。
上記それぞれの修飾子について説明しなさい。

final

(上に空行が必要)

それ以上継承できないクラスを作成する。
sealed

(上に空行が必要)

さらに継承できるクラスをpermits以下で指定する必要がある。
non-sealed

(上に空行が必要)

継承できるクラスに制限を設けない。。

sealed interface

sealed interfaceについて簡単に説明しなさい。

(上に空行が必要)

sealed interfaceはsealed classと同様に使う。
使い方は同じで継承するinterfaceや実現するclassを制限することができる。
permitsで指定されたクラスやインターフェイスはsealed classと同様に`final`、`sealed`、`non-sealed`のいずれかで修飾される必要がある。

extends、implements、permitsはこの順番で記述しなければならい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?