程序1:
public class Father{
Son[] s = new Son[5];
Father[] f = (Father)s;
}class Son extends Father{
}
程序2:
public class Father{
Son s = new Son();
Father f = (Father)s;
}class Son extends Father{
}
为什么程序1编译出错而程序2编译通过?这个问题说明了数组对象和一般对象有什么不同呢?对于一般对象而言,子类对象又为什么能够强制类型转换成父类对象?
public class Father{
Son[] s = new Son[5];
Father[] f = (Father)s;
}class Son extends Father{
}
程序2:
public class Father{
Son s = new Son();
Father f = (Father)s;
}class Son extends Father{
}
为什么程序1编译出错而程序2编译通过?这个问题说明了数组对象和一般对象有什么不同呢?对于一般对象而言,子类对象又为什么能够强制类型转换成父类对象?
父类引用指向子类对象。
public class Father{
Son s = new Son();
Father f = s;
}
class Son extends Father{
}第一个例子应该这么写。
public class Father{
Son[] s = new Son[5];
Father[] f = (Father[])s;
}class Son extends Father{
}
Son[] s = new Son[5];
Father[] f =s;
}class Son extends Father{
}
程序1:public class Father{
Father f = new Father();
Son s = (Son)f;
}class Son extends Father{
}程序2:
public class Father1{
Father[] f = new Father[5];
Son[] s = (Son[])f;
}class Son extends Father{
}现在经过修改两段代码都能编译通过了。谢谢楼上各位朋友的解答。我对自己所犯的错误感到抱歉。
现在又有了新的疑惑,数组对象和一般对象之间有区别吗?如果从内存上分析他们的区别在哪?