根据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);
}
}
}
可以知道在子类型数组中不能够放入父类型的数组,会在静态类型检查的时候就报错
可以从以上的例子得到数组中实际上是蕴含着协变原则的