public class test {
public static void main(String[] args) {
Object obj=null;
String str=null;
obj=str;
Object[] arr1=null;
String[] arr2=null;
arr1=arr2;
//以上的操作都是对的,是多态性的体现
}
}
类A是类B的父类,G< A>和G< B>不具备子父类关系,是完全并列的关系(比如String和Date的关系),下面编译都不会通过
public class test {
public static void main(String[] args) {
List<Object> list1=null;
List<String> list2=null;
list1=list2;//报错,不具备子父类关系,是完全并列的关系
}
}
分析:假设list1指向了这个放String的ArrayList,list1操作的是Object,所以可以list.add(123),会混入非String的数据,所以不可以
List<Object> list1=null;
List<String> list2=new ArrayList<>();
list1=list2;//编译不通过
public class test {
public static void main(String[] args) {
String str=null;
Date date=null;
date=str;//编译不通过
}
}
public class test {
public static void main(String[] args) {
List<Object> list1=null;
List<String> list2=new ArrayList<>();
show(list1);
//show(list2);报错
}
public static void show(List<Object> list){
}
}
补充:
A是B的父类,A< G >是B< G>的父类
public class test {
public static void main(String[] args) {
List<String> list1=null;
AbstractList<String> list2=null;
ArrayList<String> list3=null;
list1=list3;//不会报错
list2=list3;//不会报错
}
}
ArrayList和List不是子类和父类的关系,这条规则中A,B可以是子父类的关系,也可以是接口和实现类的关系,AbstractList是ArrayList的父类