java语言中父类和子类的关系

java和其他语言一样,子类可以继承父类,但父类不能继承子类。

譬如创建两个类,一个Fruit类,一个Apple类,你可以Fruit a = new Apple,不可以Apple a = new Fruit。

以常用的List型为例,你可以List l = new ArraytList,但不可以反着来。

而在List,Set等类型中,即使时它们的具体类型(就是用两个三角括号包起来的那个)是父子类的关系,它们也不能互相继承。

比如List<Fruit> a = new List<Apple>,Set<List> l =new Set<ArrayList>,这两种写法都是错的,但是List<Set> s = new ArrayList<Set>是正确的。

通过这两个例子,可以粗略的看到,对与可以进行细化元素类型的类型,即使细化的元素互为父子类关系,它们也不能够互相继承,而对类型本身则是不会遇到这个问题的。

这是因为java在运行程序时,会把List、Set之类的类型的类型细化(后面三角括号里的东西)全部擦除,擦除的结果就导致在运行时如果加入属于List但不属于ArrayList(以Set<List> l =new Set<ArrayList>这句代码为例)的元素,系统不会报错。这无疑会造成严重的错误。因此,为了避免这种错误,java决定在系统运行之前的检查中就规避掉这种行为。

同时,对于java的子类型还有如下的约束:

1.子类型可以增加方法,但不能删除方法

2.子类型需要具体化父类型中抽象的方法

3.子类型方法有更多的不变量,更强的前置条件和更弱的后置条件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值