类继承

int*_*_32 3 java oop inheritance android instanceof

我有两节课:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我用它:

FolderInfo folderInfo;
// Create it here
ItemInfo itemInfo = folderInfo;
View v = itemInfo.createItemView();
Object objectTag = v.getTag();
Run Code Online (Sandbox Code Playgroud)

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

Jes*_*per 8

如果你这样做:

if (itemInfo instanceof ItemInfo) {
    System.out.println("OK!");
}
Run Code Online (Sandbox Code Playgroud)

你将会看到"OK!"被打印,因为它FolderInfo是一个子类ItemInfo- 所以a FolderInfo也是一个ItemInfo对象.

继承意味着从子类到超类之间存在"是一种"关系 - 请参阅Liskov替换原则.