import java.util.ArrayList;
import java.util.List;
public class ListTest2 {
public static void main(String[] args) {
//如果我们不实用泛型,情况如下
ArrayList list = new ArrayList();
Person p1 = new Person("a",1);
list.add(p1);//这里list没有定义泛型,所以p1会进行向上转型,转为object类型
Object obj1 = list.get(0);//获取存储到list中的p1,返回的是object类型
//想获取p1的name,发现报错,因为obj1只能访问父类的方法,
//其中被子类重写的方法,将执行子类重写后的方法
//String name = obj1.getName();
//这时候想获取name,自能先转换为person类型
//这样想获取name,还得先进行类型转换,比较麻烦,在一般的设计中,一个list中我们都会存储相同的类型
//如果限制list中存储元素的类型呢,接下来就需要用到泛型了
String name = ((Person) obj1).getName();
//使用泛型的情况
ArrayList<Person> list2 = new ArrayList();
list2.add(p1);
//可以看到,从list2中取出的元素是person类型,没有向上转型为objec类型
Person p2 = list2.get(0);
name = p2.getName();//这时候,我们就可以直接获取name了
//还有一种情况,我们可以使用list来接收ArrayList
//ArrayList和LinkedList都实现了List接口
//当我们不清楚应该用哪种List时,就可以用List类型来接收变量
//ArrayList和LinkedList进行向上转型为List类型
List<Person> list3 = new ArrayList();
}
}
import java.util.ArrayList;
import java.util.List;public class ListTest2 {
public static void main(String[] args) {
//如果我们不实用泛型,情况如下
ArrayList list = new ArrayList();Person p1 = new Person("a",1);
list.add(p1);//这里list没有定义泛型,所以p1会进行向上转型,转为object类型
Object obj1 = list.get(0);//获取存储到list中的p1,返回的是object类型
//想获取p1的name,发现报错,因为obj1只能访问父类的方法,
//其中被子类重写的方法,将执行子类重写后的方法
//String name = obj1.getName();
//这时候想获取name,自能先转换为person类型
//这样想获取name,还得先进行类型转换,比较麻烦,在一般的设计中,一个list中我们都会存储相同的类型
//如果限制list中存储元素的类型呢,接下来就需要用到泛型了
String name = ((Person) obj1).getName();
//使用泛型的情况
ArrayList<Person> list2 = new ArrayList();
list2.add(p1);
//可以看到,从list2中取出的元素是person类型,没有向上转型为objec类型
Person p2 = list2.get(0);
name = p2.getName();//这时候,我们就可以直接获取name了
//还有一种情况,我们可以使用list来接收ArrayList
//ArrayList和LinkedList都实现了List接口
//当我们不清楚应该用哪种List时,就可以用List类型来接收变量
//ArrayList和LinkedList进行向上转型为List类型
List<Person> list3 = new ArrayList();
}}