0
votes

Accès de fonction de classe parent en Java

J'ai deux classes d'enfant B et C qui hériter d'une classe mère A. Est-il possible de faire certaines fonctions de classe A accessibles en B mais non en C en Java?


6 commentaires

Ce n'est pas une bonne idée et probablement ce que vous demandez est un XY Problème , dans lequel vous essayez de résoudre un problème le mauvais sens. Aussi, recherchez le Principe de substitution de Liskov pour voir des sous-annonces de pourquoi il s'agit d'une mauvaise idée.


Probablement le meilleur que vous puissiez faire est d'avoir C remplacer la méthode et à l'intérieur du remplacement, lancez une inscription non supportée. Puis documenter l'enfer de cela afin de ne pas contrarier les utilisateurs de C.


Bien sûr vous pouvez! Et vous pouvez le faire en utilisant le polymorphisme. Voir: docs.oracle.com/javase/tatuly/java/iandi/ polymorphisme.html . Il suffit de mettre en œuvre dans la classe C, les mêmes méthodes déclarées sur A. Les méthodes de la classe C contiennent donc une implémentation différente. Il y a une capture: c'est une odeur de code, cela signifie qu'il est possible que la conception de vos classes A, B et C soit très très fausse.


@VictorpolodegoSmontero: cela ne fait pas ce que l'OP demande


Si la méthode ne doit pas être publique, vous pouvez le rendre package-privé, mettre B dans le même package que A et c dans un autre paquet.


@HOVERCFFULLOFELLOFELLOFELLOFELLOFELLOFES: Cela dépend de ce que l'OP essaie de faire: Muhammad Ali, qu'essayez-vous de réaliser avec cela? Pouvez-vous me montrer un exemple de code?


3 Réponses :


1
votes

Eh bien, je ne sais pas un moyen de l'interdire dans le code. Mais vous pouvez simplement remplacer puis ne les remplirez pas.


0 commentaires

0
votes

Si ce que vous voulez, c'est interdire d'appeler hoatheuTouthing () code> de la classe C: xxx pré>

puis, sur C: p>

public class C extends A {

  public void travel() {
     super.travel();
     System.out.println("Travel from C");
  }

   public void makePee(){
      throw new UnsupportedOperationException("Not supported from C");
   }
}


1 commentaires

Merci pour votre explication. Ça m'a aidé



0
votes

Selon ma pensée, il n'est pas possible.

Voyons l'exemple en temps réel-> Un parent a deux enfants, alors les deux sont capables d'accéder à la propriété des parents. Il n'y a pas de restriction sur laquelle vous ne pouvez pas utiliser cela ou vous ne pouvez pas l'utiliser.

Et si vous voulez faire comme ça, vous pouvez implicitement écrire la logique en classe B également


0 commentaires