Maison > Java > javaDidacticiel > Comment utiliser les classes scellées pour restreindre l'héritage de classe dans Java 14

Comment utiliser les classes scellées pour restreindre l'héritage de classe dans Java 14

王林
Libérer: 2023-07-29 19:42:22
original
667 Les gens l'ont consulté

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 {

    // 基类的代码...

}
Copier après la connexion

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. abstractsealedabstract用于表示该类是一个抽象类,不能被实例化;sealed用于表示该类是一个Sealed Class,即限制了其子类的继承范围。

接下来,我们创建两个子类:LaptopDesktop,并使它们继承自ElectronicDevice

public final class Laptop extends ElectronicDevice {

    // Laptop类的代码...

}

public non-sealed class Desktop extends ElectronicDevice {

    // Desktop类的代码...

}
Copier après la connexion

在子类的定义上,我们使用了关键字finalnon-sealedfinal表示该类是不可被继承的,non-sealed表示该类是ElectronicDevice的子类,但不是Sealed Class。这意味着,除了LaptopDesktop这两个类之外,其他类不能直接继承自ElectronicDevice

接下来,我们可以在ElectronicDevice类中定义一些方法和属性。对于Sealed Class来说,由于其受限的继承关系,可以更加自信地在代码中使用这些方法和属性,而不用担心其它不应该继承该类的子类可能会破坏类的不变性或引入不一致性。

另外,Sealed Class还提供了一种机制,在定义子类时明确允许哪些类可以成为该类的子类。例如,我们可以创建一个名为Smartphone的子类,并使其只允许IOSPhoneAndroidPhone两个类继承:

public sealed class Smartphone extends ElectronicDevice permits IOSPhone, AndroidPhone {

    // Smartphone类的代码...

}

public final class IOSPhone extends Smartphone {

    // IOSPhone类的代码...

}

public final class AndroidPhone extends Smartphone {

    // AndroidPhone类的代码...

}
Copier après la connexion

在这个例子中,我们使用permits关键字来明确指定Smartphone类允许继承的类的范围。这就意味着,只有IOSPhoneAndroidPhone两个类可以继承自Smartphone,其他类不能。

通过Sealed Classes,我们可以更好地管理和限制类的继承关系,提高代码的可读性和可维护性。只需要在定义类时使用sealed关键字,以及在定义子类时使用permits

Ensuite, nous créons deux sous-classes : Laptop et Desktop et les faisons hériter de ElectronicDevice :

rrreee

Dans la sous-classe En définition, nous utilisons les mots-clés final 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal