Maison  >  Article  >  Java  >  Comment utiliser des classes scellées pour restreindre l'héritage et l'implémentation de classes dans Java 14

Comment utiliser des classes scellées pour restreindre l'héritage et l'implémentation de classes dans Java 14

WBOY
WBOYoriginal
2023-07-30 23:08:051264parcourir

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

À mesure que Java continue de se développer, de nouvelles versions sont continuellement lancées, offrant aux développeurs des fonctionnalités et des outils plus puissants pour améliorer la lisibilité et la maintenabilité du code. Dans Java 14, le concept de classes scellées a été introduit, un mécanisme qui restreint l'héritage et l'implémentation des classes. Cet article présentera en détail comment utiliser les classes scellées et ses scénarios d'application pratiques.

  1. Que sont les classes scellées ?
    Sealed Classes est un mécanisme qui limite l'héritage et la mise en œuvre des classes. En ajoutant le mot clé scellé avant la définition d'une classe ou d'une interface, vous pouvez définir une plage de sous-classes ou de classes d'implémentation de cette classe ou interface. Seules les sous-classes ou classes d'implémentation dans cette portée peuvent hériter ou implémenter la classe ou l'interface, tandis que les classes en dehors de la portée ne peuvent pas en hériter ou l'implémenter. Cela peut éviter l'abus ou la mauvaise utilisation des classes et améliorer la sécurité et la stabilité du code.
  2. Comment utiliser les classes scellées
    Avant de définir une classe scellée, vous devez définir une interface scellée ou une classe abstraite ordinaire. Cette interface scellée ou classe abstraite joue un rôle dans la limitation de la portée et définit quelles classes peuvent hériter ou implémenter la classe ou l'interface. Ensuite, vous pouvez utiliser le mot-clé scellé pour définir la classe ou l'interface. L'exemple de code est le suivant :
public sealed class Animal permits Cat, Dog, Bird {
    // class body
}

public final class Cat extends Animal {
    // class body
}

public final class Dog extends Animal {
    // class body
}

public final class Bird extends Animal {
    // class body
}

public class InvalidClass extends Animal {
    // compile error: InvalidClass is not allowed to extend Animal
}

Dans le code ci-dessus, un animal de classe scellé est défini. Et grâce au mot-clé permits, les sous-classes de cette classe sont définies comme Cat, Dog et Bird, tandis que la classe InvalidClass dépasse la portée et ne peut pas hériter de la classe Animal.

  1. Caractéristiques et limitations des classes scellées
  2. Les classes scellées peuvent être une classe finale, c'est-à-dire que les extensions de sous-classes ne sont pas autorisées.
  3. Les classes scellées peuvent contenir des méthodes abstraites, mais les méthodes avec implémentation par défaut ne sont pas autorisées.
  4. Lorsque vous définissez des classes scellées comme classes non finales mais ne spécifiez pas de sous-classes, toutes les sous-classes directes doivent être déclarées dans le même fichier source.
  5. Les sous-classes des classes scellées doivent être définies dans le même package que la classe parent.
  6. Les sous-classes indirectes des classes scellées doivent être des classes finales.
  7. Scénarios d'application pratiques des classes scellées
    Les classes scellées ont de nombreux scénarios d'application dans le développement réel. Voici quelques exemples :
  • En mode machine à états, vous pouvez utiliser les classes scellées pour définir un ensemble limité d'états et limiter les états. states L'héritage et l'implémentation garantissent que seul l'état spécifié peut être utilisé.

    public sealed class State permits Waiting, Running, Closed {
      // class body
    }
    
    public final class Waiting extends State {
      // class body
    }
    
    public final class Running extends State {
      // class body
    }
    
    public final class Closed extends State {
      // class body
    }
    
    public final class InvalidState extends State {
      // compile error: InvalidState is not allowed to extend State
    }
  • Dans le développement de frameworks et de bibliothèques, les classes scellées peuvent être utilisées pour restreindre l'héritage et l'implémentation de certaines classes afin de garantir que la logique de base du framework ne sera pas modifiée.

    public sealed class CoreLibrary permits Util, Helper, Logger {
      // class body
    }
    
    public final class Util extends CoreLibrary {
      // class body
    }
    
    public final class Helper extends CoreLibrary {
      // class body
    }
    
    public final class Logger extends CoreLibrary {
      // class body
    }
    
    public final class InvalidLibrary extends CoreLibrary {
      // compile error: InvalidLibrary is not allowed to extend CoreLibrary
    }

Comme vous pouvez le voir dans les exemples ci-dessus, les classes scellées apportent plus de contrôle sur l'héritage et l'implémentation des classes aux développeurs Java, ce qui peut améliorer la sécurité et la stabilité du code et éviter les abus et la mauvaise utilisation des classes. Cependant, il convient de noter que les classes scellées ne conviennent pas à tous les scénarios et doivent néanmoins être utilisées avec prudence en fonction des besoins réels.

Résumé :
Cet article explique comment utiliser les classes scellées pour restreindre l'héritage et l'implémentation de classes dans Java 14. En utilisant le mot-clé scellé et en définissant le mot-clé permits, vous pouvez limiter la portée de la classe et éviter les abus et les utilisations inappropriées de la classe. Dans le même temps, nous avons également discuté des caractéristiques et des limites des classes scellées, ainsi que des scénarios d'application pratiques. Dans le développement réel, l'utilisation rationnelle des classes scellées peut améliorer la sécurité et la stabilité du code, rendant le code plus facile à comprendre et à maintenir.

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!

Déclaration:
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