我有两节课:

class ItemInfo {

   public View createItemView() {
       View v;
       // ...
       v.setTag(this);
       return v;
   }
}

class FolderInfo extends ItemInfo {

    @Override
    public View createItemView() {
        View v;
        // ...
        v.setTag(this);
        return v;
    }
}

然后我用它:
FolderInfo folderInfo;
// Create it here
ItemInfo itemInfo = folderInfo;
View v = itemInfo.createItemView();
Object objectTag = v.getTag();

然后我通过instanceof检查objectTag的类型,它是ItemInfo!为什么?

最佳答案

如果您这样做:

if (itemInfo instanceof ItemInfo) {
    System.out.println("OK!");
}

您当然会看到正在打印"OK!",因为FolderInfoItemInfo的子类-因此FolderInfo也是ItemInfo对象。

继承意味着从子类到超类之间存在“是”关系,请参见Liskov substitution principle

09-10 03:05