網頁

2022/4/2

Java sealed class簡介

Java sealed class用法如下。


Seald class最初妤JEP 360提案經JEP 397修訂並於Java 15、16釋出preivew版,最終於JEP 409成為標準釋出於Java 17。

Sealed class宣告類別(class)及介面(interface)可被哪些類別繼承或實作,換句話說未被sealed class允許的類別或介面則不能繼承或實作。目的是避免被任意繼承造成的混亂。

class/interface前使用關鍵字sealed定義sealed class,並在類別名稱後使用permits定義允許繼承/實作的類別/介面,

public sealed class Parent premits Child1, Child2 {}


範例

範例環境:

  • Java 17


Sealed class

例如下面Vehicle為sealed class,允許CarTrainShip繼承。

Vehicle

public sealed class Vehicle permits Car, Train, Ship {}

繼承Sealed class的子類必須是non-sealed類或final類

Non-sealed class

下面的Car為non-sealed類,在class前使用non-sealed關鍵字,允許繼承Vehicle

Car

public non-sealed class Car extends Vehicle {}


Final class

下面的Train為final類,在class前使用final關鍵字,允許繼承Vehicle

Train

public final class Train extends Vehicle {}

不可繼承

下面的Plane雖為final類,但因sealed class Vehicle未允許繼承,所以出現錯誤。

Plane

public final class Plane extends Vehicle {} // error! Plane is not allowed in the sealed hierarchy

下面的Ship未標示non-sealedfinal所以即使Vehicle允許其繼承編譯錯誤。

Ship

public class Ship extends Vehicle {} // error! sealed, non-sealed or final modifiers expected


沒有留言:

張貼留言