• Java Generics and Collections-2.1


    2.1 子类化以及替换原理

    为什么List<Integer> 不是List<Number> 的子类?

    首先看下面的代码,这段代码是编译不过的
    
    package java_generics_collections.chap2;
    
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by jintaox on 2016/3/21.
     */
    public class Test_2_1 {
        @Test
        public void test_01() throws Exception {
            List<Integer> ints = new ArrayList<>();  //a
            ints.add(3);//b
            ints.add(4);//c
            List<Number> nums = ints;//d
            nums.add(new Double(3.14));//e
        }
    }
    

    假如,List 是List的子类型,首先List 中的add方法接受一个T类型的变量,因此,它们分别接受Integer和Number
    当代码运行到d处时不会编译不过,那么当运行到e处时,因为ints的add方法接受一个Integer,而nums的add方法接受一个Number类型,
    由于多态,当调用nums.add()时,实际调用为子类的add方法,那么其接受为Integer型,而给出的确实Double型,而Integer和Double是不能互换的。也就是说,根据Java的泛型规范,这样是不可以的。
    因此,对于Son extends Father的情况,List<Son>不是List<Father>的子类,把它们认为是不想关的好了。

  • 相关阅读:
    在linux下使用sqlcmd
    sqlserver 索引的结构及其存储,索引内容
    据库被标记为RESTORING的处理方式,正在还原中,正在恢复
    sql语句的优化分析
    SQL Server表分区-水平分区
    JavaScript Structure
    JS----Issue
    JavaScript Book Plan
    LINQ
    About JavaScript
  • 原文地址:https://www.cnblogs.com/xiaojintao/p/5303375.html
Copyright © 2020-2023  润新知