学到多态了。引用变量的两种类型:
编译时类型 和 运行时类型。这什么意思啊? 我理解不了

解决方案 »

  1.   

    比如:A是B的父类或者B实现的接口
    那么我们常常会这样做A a = new B();编译的时候编译器会认为它是A类型的对象,而且B是A的子类或者B实现了A接口,那么理所当然这是没问题的。运行是类型是指在运行期间a这个变量的具体类型。因为我们new的是B这个对象,所以a引用的确确实实是B。
    编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。