我有两个类:
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!为什么?
发布于 2012-07-12 19:21:08
如果您这样做:
if (itemInfo instanceof ItemInfo) {
System.out.println("OK!");
}您当然会看到"OK!"被打印出来,因为FolderInfo是ItemInfo的子类-所以FolderInfo也是ItemInfo对象。
继承意味着从子类到超类之间存在一种“是一种”关系--参见Liskov substitution principle。
发布于 2012-07-12 19:26:44
您可以通过键入以下命令进行检查:
if (iteminfo instanceof FolderInfo) {
// do what you want
}
else if (iteminfo instanceof ItemInfo) {
// do what you want
}发布于 2012-07-12 19:24:32
InstanceOf是对IS A关系的检查。
if(ChildClass instanceOd ParentClass)总是返回true。即使所有实现接口A的类都能通过(AllClassess instanceOf A)的测试
在您的示例中,FolderInfo是ItemInfo。
https://stackoverflow.com/questions/11450680
复制相似问题