java中子类与超类之间替换原则

java中继承这章中,超类的引用是不能赋给
子类的。
例如:
Employee是超类,manager是子类;
Employee boss= new Employee("Jack"
, 50000, 2002, 9,18);
manager staff[]=new manager[3];
staff[0]=boss;
这是不被允许的,首先manager都是
Employee,但不是所有的Employee都是
manager,上例子意思就是所有的Employee
都是manager了,所以违背了继承的规定。
而子类引用是可以赋给超类的
例如:
Employee是超类,manager是子类;
manager boss= new manager("Jack"
, 50000, 2002, 9,18);
Employee staff[]=new Employee[3];
staff[0]=boss;

但是子类引用的数组转换成超类引用的数组
是会出现一个问题,
例如:
Employee是超类,manager是子类;
manager mana[]=new manager[3];
Employee staff[]=mana;   //合法
先分析:staff[]和mana[]其实是相同的引
用,staff数组指向的是manager的数组,
比如:
staff[0]=new Employee("Jack", 50000
, 2002, 9,18);
mana[0].setBounus(1000);   //此处会出现jav
a.lang.ArrayStoreException异常
(setBounus()只有manager类中才有的方法)
此时,new的话,只是在Employee对象中进
行属性初始化,我们要知道此时mana[0]就
是Employee的对象了,而不是manager的对
象,所以在调用子类manager中才有的
setBounus(),就会发生向后转型,和第一
个例子差不多“就是所有的Employee都是
manager了”。
书中提到:为了确保不发生这类破坏,所有数
组都要牢记创建时的元素类型,并负责监督仅
将类型兼容的引用存储到数组中。








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值