Manager是boss的子类
Manager boss = new Manager(...);
Employee[] staff = new Employee[3];
staff[0] = boss;
在这个例子中,变量 staff[0] 和 boss 引用同一个对象,为什么都不可以调用Manager中的方法呢?
书上说编码器将staff[0]看成Employee 对象,表示不理解
Manager是boss的子类
Manager boss = new Manager(...);
Employee[] staff = new Employee[3];
staff[0] = boss;
在这个例子中,变量 staff[0] 和 boss 引用同一个对象,为什么都不可以调用Manager中的方法呢?
书上说编码器将staff[0]看成Employee 对象,表示不理解
这是服务提供者和使用者之间的契约。
举个不那么恰当的例子,A厂卖水泥,钢筋,A厂和B厂签订合同说,A卖水泥给B。
虽然A实际上还可以卖钢筋,但按照合同约定B只能跟A要水泥。
A厂就是那个对象,能力可以无限强,合同就是对象声明的类型,限定了对外暴露的能力,使用者(B厂)只能按照合同约定(对象声明)来使用。