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,允許Car
、Train
、Ship
繼承。
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-sealed
或final
所以即使Vehicle
允許其繼承編譯錯誤。
Ship
public class Ship extends Vehicle {} // error! sealed, non-sealed or final modifiers expected
沒有留言:
張貼留言