类结构

class Packet {}
class PacketList extends ArrayList<Packet> {}




现在我正在尝试将ArrayList的对象转换为PacketList的对象

List<Packet>  p = new ArrayList<Packet> ();
PacketList pList = p;




但这是行不通的。请帮帮我

错误信息:

不兼容的类型:列表不能转换为PacketList

最佳答案

PacketList扩展了ArrayList<Packet>,这意味着新引入或覆盖的方法可能需要并依赖于仅在新PacketList版本中引入的其他工件。如果它引用仅在PacketList中可用的实例变量怎么办? ArrayList将没有那些实例变量,尽管您打算通过这些方法来访问它们……

不可以,您不能将超类的实例分配给与扩展类匹配的类型的变量。

反之亦然,您可以使用超级类型作为泛型来分配扩展(子类化)实例。

09-25 22:23