请问:
这是think in java上的:
动态绑定 它的含义就是在运行是根据对象的类型进行绑定 也就是说 编译器一直不知道对象的类型 我的疑问:
如果编译器将子类和基类当成同一种类型 那么我将基类对象赋给子类引用的时候为什么不可以呢 这说明编译器在编译期可以判断出基类和子类是不同的类型啊 谢谢
这是think in java上的:
动态绑定 它的含义就是在运行是根据对象的类型进行绑定 也就是说 编译器一直不知道对象的类型 我的疑问:
如果编译器将子类和基类当成同一种类型 那么我将基类对象赋给子类引用的时候为什么不可以呢 这说明编译器在编译期可以判断出基类和子类是不同的类型啊 谢谢
class SubClass extends SuperClass {}public class Test { /**
* @param args
*/
public static void main(String[] args) {
// 1.
SubClass sub = new SubClass();
SuperClass sup = sub;
SubClass sub2 = (SubClass)sup; // 没问题
// 2.
SuperClass sup2 = new SuperClass();
SubClass sub3 = (SubClass)sup2; // 语法上没错, 但是逻辑上有问题, 类型转换发生异常
}
}父类对象不能直接赋值给子类对象.
如果一个对象是子类对象, 先赋值给父类对象, 再由这个父类对象赋值给子类对象, 这时没有任何问题.
假定动物类 狗类继承动物类
动物类 a ;
狗类 b = new 狗类
a = (动物类)b;//可以 狗是一种动物 狗具有动物的特征
狗类 b;
动物类 a = new 动物类
b = (狗类)a;//不可以 动物不是一种狗 动物类不包括狗类特有的特征你可以说
狗是一种动物
而不能说 动物是一种狗
is-a has-a