POO : Portée des classes héritées

Résolu/Fermé
landboa - 12 févr. 2014 à 21:02
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 12 févr. 2014 à 21:06
Bonjour,
J'ai les classes Java suivantes :



abstract class Animal {
protected int poids;
protected String couleur;

protected void manger (){
System.out.println ("Je mange de la viande");
}

public void getpoids (){
System.out.println ("Je pèse en kg : " + poids);
}

abstract void deplacement ();
abstract void crier ();
}


abstract class Felin extends Animal {
protected void deplacement (){
System.out.println ("Je me déplace silencieusement");
}

abstract void crier ();
}

public class Chat extends Felin{
public Chat (int pPoids, String pCouleur){
poids = pPoids;
couleur = pCouleur;
}

public void crier (){
System.out.println ("Je miaule");
}
}


Après cela j'ai le programme suivant :
public class ClassMain {

public static void main (String [] args){
Chat Gudule = new Chat (3, "Noir");
Gudule.getpoids();
Gudule.poids = 5;
Gudule.getpoids();
Gudule.manger ();
Gudule.deplacement();
Gudule.crier();
}
}

Ma question est la suivante : Comment ce fait il que je puisse accèder au poids (avec Gudule.poids = 5;) alors que poids est 'protected' ? Il faut etre dans une classe fille pour que cela soit possible et ClassMain n'est pas fille de Animal.
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 12/02/2014 à 21:09
Java autorise des "facilités" de développement. Tu peux ainsi accéder aux attributs protected de n'importe quelle classe (avec ou sans relation d'héritage) lorsque celle-ci se trouve dans le même package.

Si tu mets Chat et ClassMain dans deux packages différents tu ne pourras pas compiler à cause des accès à poids, manger() et deplacement()
La confiance n'exclut pas le contrôle
0