首页
学习
活动
专区
圈层
工具
发布

类继承
EN

Stack Overflow用户
提问于 2012-07-12 19:17:25
回答 4查看 105关注 0票数 3

我有两个类:

代码语言:javascript
复制
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;
    }
}

然后我使用它:

代码语言:javascript
复制
FolderInfo folderInfo;
// Create it here
ItemInfo itemInfo = folderInfo;
View v = itemInfo.createItemView();
Object objectTag = v.getTag();

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-12 19:21:08

如果您这样做:

代码语言:javascript
复制
if (itemInfo instanceof ItemInfo) {
    System.out.println("OK!");
}

您当然会看到"OK!"被打印出来,因为FolderInfoItemInfo的子类-所以FolderInfo也是ItemInfo对象。

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

票数 8
EN

Stack Overflow用户

发布于 2012-07-12 19:26:44

您可以通过键入以下命令进行检查:

代码语言:javascript
复制
if (iteminfo instanceof FolderInfo) {
// do what you want
}
else if (iteminfo instanceof ItemInfo) {
// do what you want
}
票数 1
EN

Stack Overflow用户

发布于 2012-07-12 19:24:32

InstanceOf是对IS A关系的检查。

if(ChildClass instanceOd ParentClass)总是返回true。即使所有实现接口A的类都能通过(AllClassess instanceOf A)的测试

在您的示例中,FolderInfoItemInfo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11450680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档