我有两节课:
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!"
,因为FolderInfo
是ItemInfo
的子类-因此FolderInfo
也是ItemInfo
对象。继承意味着从子类到超类之间存在“是”关系,请参见Liskov substitution principle。