泛型和子类继承

package test.com.atguigu.javase.lesson8;

import com.atguigu.javase.lesson8.Person;
import com.atguigu.javase.lesson8.Student;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;

/** 
* GenericAndExtendsTest Tester.
*/ 
public class GenericAndExtendsTestTest {

    @Test
    public void testGenericAndExtends(){
        Object[] objects = new Object[10];
        Person[] persons = new Person[10];

        //Object是Person的父类,则Object的数组也是Person数组的父类
        objects = persons;

        List<Object> objectList = new ArrayList<>();
        List<Person> personList = new ArrayList<>();
        //Object是Person的父类,但List<Object>却不是List<Person>的父类
        //用反证法:若可以,则意味着可以向objectList中放入任何类型的对象,而从personList中
        //获取的确是Person类型的对象。这不可能。
        //objectList = personList; //报错

        printPersons(personList);

        List<Student> studentList = new ArrayList<>();
        //不能传入studentList,理由同上
        //printPersons(studentList);

        printPersons2(studentList);
    }

    /**
     * 要求传入的参数必须是Person类型的List或Person子类类型的List
     * 即:List<Person> persons 或 List<Student> stus
     * 带通配符的集合的泛型声明
     * @param persons
     */
    public void printPersons2(List<? extends Person> persons){

    }   

    public void printPersons(List<Person> persons){

    }
} 

猜你喜欢

转载自blog.csdn.net/ada_yangyang/article/details/80945037