Visibilité d'une méthode après un héritage

Visibilité d'une méthode après un héritage - PHP - Programmation

Marsh Posté le 04-06-2008 à 14:37:24    

Salut !
 

Code :
  1. class A{
  2.    protected function f(){
  3.  
  4.    }
  5. }
  6.  
  7. class B extends A{
  8.    public function f(){
  9.  
  10.    }
  11. }


 
Y'a quelqu'un pour m'expliquer pourquoi on peut augmenter (mettre en public) la visibilité de f() alors que dans mon esprit c'était le contraire ? [:wam]  
Si je veux mettre B::f() en privé ça me jette : « Fatal error: Access level to B::f() must be protected (as in class A) or weaker in /home/xxx/hfr.php on line 13 ».
 
(PHP 5.2.5-3+lenny1 with Suhosin-Patch 0.9.6.2 (cli))

Reply

Marsh Posté le 04-06-2008 à 14:37:24   

Reply

Marsh Posté le 04-06-2008 à 14:47:37    

Bah non c'est comme ça (et ça me paraît logique), dans la classe de base ce que tu définis c'est la visibilité minimum. T'as le droit de l'étendre dans les sous-classes si ça te chante, mais pas de la restreindre.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 04-06-2008 à 18:46:22    

Ben là en l'occurence il redéfinit f, donc moi ca me parait étrange qu'il ne puisse pas la mettre en private si ca lui chante, non ?
 
En même temps je dis ca, je n'ai jamais eut besoin de faire ce genre de manipulation alors le véritable problème est peut-être à chercher au niveau de la conception...


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 04-06-2008 à 18:54:12    

Un objet d'une sous-classe B est censé pouvoir remplacer un objet de la classe parent A partout ou un objet de cette classe est attendu. Donc si quelqu'un veut utiliser une fonction publique A::f il ne faut pas qu'un B::f la fasse "disparaitre".
 
Inversement si B fait "apparaitre" une fonction protected de A, cela ne gène en rien les utilisateurs de la classe A, si A a laissé la fonction en protected au lieu de private, il autorise ses sous-classes à en faire ce qu'elles veulent, y compris l'exposer au monde entier.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed