创建只接受指定类型的JAVA容器类!

想申明一个ArrayList:DogArrayList,让他只能保存类Dog的对象。然后就可以(DogDogArrayList.get(i);看起来很简单,很自然的想法。但是这里有一个问题。JAVA的集合都是保存对象,而不会自动的做类型检测。也就是说你也可以把Cat类型的东西addDogArrayList里面,对此JAVA是欣然接受的,但是却在(DogDogArrayList.get(i)时抛出异常!为了解决这个问题,我们很自然的想到,生成自己的类,继承ArrayList,然后在其中强制其只接受Dog类的对象,于是产生了如下代码:

public class DogArrayList extends ArrayList 

{  

    List al=new ArrayList();

    public void add(Dog d){

       al.add(d);

    }

    ...

}通过继承,然后重载add(Object o)方法,看起来好像已经达到目的,但是结果一测试,发现Cat依旧可以专到Dog窝里!why?!其实原因很简单,这里只是覆盖,那么当Cat跑过来,发现身份不符时,就会去匹配基类的add(Object o)方法。诶,这下行了,所以他就顺利的混了进去!

那么该怎么办你?!其实也很简单,不用继承,用组合,就可以了!

public class DogArrayList 

{  

    List al=new ArrayList();

    public void add(Dog d){

       al.add(d);

    }

    ...

}

就少了,一个继承关系,就OK了!所以,在继承的时候一定要留意这个问题,不要让被覆盖的类偷偷的执行,从而坏了你的大事!

JAVA集合类,进行类型限制 不能用继承,用组合,因为继承时被覆盖的方法会在类型匹配的情况下得以运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值