原创 原创java连载--泛型(5)

2008-11-12 20:59 2808 11 11 分类: 软件与OS

泛型的子类型


       只要两种类型能够相符,我们可以把一种类型的对象赋给另外一种类型的对象。例如,可以把一个Integer赋给一个Object,因为ObjectInteger的父类之一。


    Object someObject = new Object();


    Integer someInteger = new Integer(10);


    someObject = someInteger; // OK


       在面向对象的编程中,IntegerObject之间的这种关系叫做 ”is a”,也就是说在本质上是相同的,Integer是一种Object,所以才允许上面的这种赋值。由于Integer也是Number的一种,所以下面的赋值也是有效的:


    public void someMethod(Number n){


        // method body omitted


    }


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


    someMethod(new Integer(10)); // OK


    someMethod(new Double(10.1)); // OK


       对于泛型来讲,上面的讨论的这种关系也是适用的。在一个泛型调用中,我们可以传递Number作为它的参数,但是在后续调用add方法的时候,我们使用和Number相符的类型作为其参数:


    Box<Number> box = new Box<Number>();


    box.add(new Integer(10)); // OK


    box.add(new Double(10.1)); // OK


 


       我们现在考虑下面的方法:


    public void boxTest(Box<Number> n){


        // method body omitted


    }


       上面这个方法能够接受的参数是什么呢?实际上,我们可以看出它的参数是Box<Number>。那么我们能不能传递Box<Integer>或者Box<Double>作为它的参数呢?不能,原因就是Box<Integer>Box<Double>不是Box<Number>的子类型。

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条