数组中的协变原则

根据LSP原则,我们可以知道子类型方法参数是逆变的,而子类型的返回值是协变的。

下面我想测试的是在数组中所存在的协变原则

代码如下:

public  class test {
    public static void main(String[] args) {
        Number[] numbers= new Number[2];
        numbers[0]=new Integer(10);

        numbers[1]=new Double(3.14);

        for(Number n:numbers)
        {
            System.out.println(n);
        }

    }

}

运行结果如下:


可以知道在数组中可以存放子类型元素,由于Integer和Double均为Number的子类型,故可以正确放入并且取出,满足协变原则

再开下面的例子:

public  class test {
    public static void main(String[] args) {
        Integer[] myInts={1,2,3,4};
        Number[] myNumber=myInts;
        myNuber[0]=3.14;
        for(Number n:myNumber)
        {
            System.out.println(n);
        }
    }

}

可以知道在子类型数组中不能够放入父类型的数组,会在静态类型检查的时候就报错


可以从以上的例子得到数组中实际上是蕴含着协变原则的

阅读更多

没有更多推荐了,返回首页