Bonjour,
Pourquoi staff[0].getsalary() qui soit disant est de type employé mais fait référence à un objet de type manager appelle getsalary() ( dans la classe Manager),
mais que Staff[0].getBonus() ne marche pas?
Si Staff[0].getBonus,ne marche pas, staff[0].getsalary devrait appeller alors getsalary() de la classe Employée?
Merci à vous


j'ai l'exemple suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import java.util.*;
 
public class ManagerTest
{  
   public static void main(String[] args)
   {  
      // construct a Manager object
      Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
      boss.setBonus(5000);
 
      Employee[] staff = new Employee[3];
 
      // fill the staff array with Manager and Employee objects
 
      staff[0] = boss;
      staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
      staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15);
 
 
 
      // print out information about all Employee objects
      for (Employee e : staff)
         System.out.println("name=" + e.getName()
            + ",salary=" + e.getSalary());
   }
}
 
class Employee
{  
   public Employee(String n, double s, int year, int month, int day)
   {  
      name = n;
      salary = s;
      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
      hireDay = calendar.getTime();
   }
 
   public String getName()
   {
      return name;
   }
 
   public double getSalary()
   {  
      return salary;
   }
 
   public Date getHireDay()
   {  
      return hireDay;
   }
 
   public void raiseSalary(double byPercent)
   {  
      double raise = salary * byPercent / 100;
      salary += raise;
   }
 
   private String name;
   private double salary;
   private Date hireDay;
}
 
class Manager extends Employee
{  
   /**
      @param n the employee's name
      @param s the salary
      @param year the hire year
      @param month the hire month
      @param day the hire day
   */
   public Manager(String n, double s, int year, int month, int day)
   {  
      super(n, s, year, month, day);
      bonus = 0;
   }
 
   public double getSalary()
   { 
 
	   double baseSalary = super.getSalary();
      return baseSalary + bonus;
   }
 
   public void setBonus(double b)
   {  
      bonus = b;
   }
 
   private double bonus;
}
Pourquoi staff[0].getsalary() qui soit disant est de type employé mais fait référence à un objet de type manager appelle getsalary() ( dans la classe Manager),
mais que Staff[0].getBonus() ne marche pas?
Si Staff[0].getBonus,ne marche pas, staff[0].getsalary devrait appeller alors getsalary() de la classe Employée?