Comment utiliser les classes scellées pour restreindre les relations d'héritage de classe dans Java 14
Dans Java 14, le concept de classes scellées a été introduit, qui fournit un mécanisme pour restreindre les relations d'héritage de classe. Les classes scellées nous permettent de spécifier explicitement quelles classes peuvent hériter de cette classe et quelles classes sont autorisées à devenir des sous-classes directes de cette classe. De cette façon, nous pouvons mieux contrôler la relation d'héritage des classes et réduire les problèmes potentiels liés à l'héritage d'une classe qui ne devrait pas être héritée.
Dans cet article, nous présenterons comment utiliser les classes scellées dans Java 14 et fournirons quelques exemples de code pour faciliter la compréhension.
Tout d'abord, créons une classe de base, en supposant que nous construisons une hiérarchie de classes pour un appareil électronique :
public abstract sealed class ElectronicDevice permits Laptop, Desktop { // 基类的代码... }
Dans la définition de la classe de base, nous utilisons deux mots-clés : abstract
et scellé
. abstract
est utilisé pour indiquer que la classe est une classe abstraite et ne peut pas être instanciée ; sealed
est utilisé pour indiquer que la classe est une classe scellée, ce qui limite la portée de l'héritage de ses sous-classes. abstract
和sealed
。abstract
用于表示该类是一个抽象类,不能被实例化;sealed
用于表示该类是一个Sealed Class,即限制了其子类的继承范围。
接下来,我们创建两个子类:Laptop
和Desktop
,并使它们继承自ElectronicDevice
:
public final class Laptop extends ElectronicDevice { // Laptop类的代码... } public non-sealed class Desktop extends ElectronicDevice { // Desktop类的代码... }
在子类的定义上,我们使用了关键字final
和non-sealed
。final
表示该类是不可被继承的,non-sealed
表示该类是ElectronicDevice
的子类,但不是Sealed Class。这意味着,除了Laptop
和Desktop
这两个类之外,其他类不能直接继承自ElectronicDevice
。
接下来,我们可以在ElectronicDevice
类中定义一些方法和属性。对于Sealed Class来说,由于其受限的继承关系,可以更加自信地在代码中使用这些方法和属性,而不用担心其它不应该继承该类的子类可能会破坏类的不变性或引入不一致性。
另外,Sealed Class还提供了一种机制,在定义子类时明确允许哪些类可以成为该类的子类。例如,我们可以创建一个名为Smartphone
的子类,并使其只允许IOSPhone
和AndroidPhone
两个类继承:
public sealed class Smartphone extends ElectronicDevice permits IOSPhone, AndroidPhone { // Smartphone类的代码... } public final class IOSPhone extends Smartphone { // IOSPhone类的代码... } public final class AndroidPhone extends Smartphone { // AndroidPhone类的代码... }
在这个例子中,我们使用permits
关键字来明确指定Smartphone
类允许继承的类的范围。这就意味着,只有IOSPhone
和AndroidPhone
两个类可以继承自Smartphone
,其他类不能。
通过Sealed Classes,我们可以更好地管理和限制类的继承关系,提高代码的可读性和可维护性。只需要在定义类时使用sealed
关键字,以及在定义子类时使用permits
Laptop
et Desktop
et les faisons hériter de ElectronicDevice
: rrreee
Dans la sous-classe En définition, nous utilisons les mots-clésfinal
et non-sealed
. final
signifie que la classe ne peut pas être héritée, et non-sealed
signifie que la classe est une sous-classe de ElectronicDevice
, mais pas une classe scellée. Cela signifie que, à l'exception des deux classes Laptop
et Desktop
, les autres classes ne peuvent pas hériter directement de ElectronicDevice
. Ensuite, nous pouvons définir certaines méthodes et propriétés dans la classe ElectronicDevice
. Pour la classe scellée, en raison de sa relation d'héritage restreinte, vous pouvez utiliser ces méthodes et propriétés dans votre code avec plus de confiance sans craindre que d'autres sous-classes qui ne devraient pas hériter de la classe puissent détruire l'invariance de la classe ou introduire des incohérences. 🎜🎜De plus, Sealed Class fournit également un mécanisme permettant explicitement d'autoriser quelles classes peuvent devenir des sous-classes de cette classe lors de la définition d'une sous-classe. Par exemple, nous pouvons créer une sous-classe nommée Smartphone
et autoriser seulement deux classes, IOSPhone
et AndroidPhone
, à hériter : 🎜rrreee🎜 Dans cet exemple , nous utilisons le mot-clé permits
pour spécifier explicitement la portée des classes dont la classe Smartphone
est autorisée à hériter. Cela signifie que seules deux classes, IOSPhone
et AndroidPhone
, peuvent hériter de Smartphone
, mais pas les autres classes. 🎜🎜Grâce aux classes scellées, nous pouvons mieux gérer et restreindre la relation d'héritage des classes et améliorer la lisibilité et la maintenabilité du code. Il vous suffit d'utiliser le mot-clé sealed
lors de la définition d'une classe et le mot-clé permits
lors de la définition d'une sous-classe pour définir clairement la portée d'héritage de la classe et éviter les relations d'héritage inattendues. aux problèmes potentiels. 🎜🎜Pour résumer, dans Java 14, Sealed Classes fournit un mécanisme de gestion des relations d'héritage de classe plus flexible et plus précis. Grâce à une utilisation raisonnable des classes scellées, nous pouvons mieux contrôler et protéger la relation d'héritage des classes, améliorant ainsi la fiabilité et la maintenabilité du code. 🎜🎜J'espère que cet article vous aidera à utiliser les classes scellées pour restreindre les relations d'héritage de classe dans Java 14. Merci d'avoir lu! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!