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
沒有留言:
張貼留言