1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package package2;
import package1.Mom;
public class Son extends Mom
{
public String toString()
{
return "S[count="+this.count+";id="+this.id+"]";
}
public String test()
{
Son other = new Son();
// other.id est visible car id est protected dans la classe Mom, et nous sommes dans le cadre de l'héritage
// (Son hérite de Mom et a accès au membre id de la classe Son, même si nous agissons sur une autre instance que l'instance courante)
return "O[count="+other.count+";id="+other.id+"]";
}
protected int getId()
{
return id;
}
}
public class Daughter extends Mom
{
public String toString()
{
return "D[count="+this.count+";id="+this.id+"]";
}
public String test()
{
Son other = new Son();
// other.id n'est pas visible car id est protected dans la classe Mom, or nous sommes dans un autre package et hors du cadre de l'héritage
// (Daughter hérite de Mom et a accès au membre id de la classe Daughter, mais pas à celui de la classe Son)
// return "O[count="+other.count+";id="+other.id+"]";
// other.getId() est visible car getId() est protected dans la classe Son, et nous sommes dans le même package
// other.count est visible, au contraire de other.id, parce qu'il s'agit en fait du membre statique de la classe Mom
// j'aurais du en tout rigueur écrire Mom.count (le compilateur émet un warning mais accepte cette syntaxe)
return "O[count="+other.count+";id="+other.getId()+"]";
}
} |
Partager