我有一个这样的父类(super class):
public class GenericUpdate{
//...other stuff...
public String getName(){return null;};
}
还有这样的子类:
public class FromFriend extends GenericUpdate {
@Override
public String getName() {return getFriend().getName();}
}
或者这个:
public class FromArtist extends GenericUpdate {
@Override
public String getName() {return getArtist().getName();}
}
现在,
其他一些类(class)给我一个GenericUpdate
如果我遍历列表并调用 GenericUpdate.getName()
,我会从 getName()
返回 null
有什么好的解决方案可以避免这种情况吗?
谢谢
编辑编辑编辑编辑编辑
GenericUpdate
类的实际实例是从 Android Intents 中检索的,它们是这样检索的:
genericUpdate=intent.getParcelableExtra(GENERIC_UPDATE);
它们的意图是这样的:
GenericUpdate genericUpdate=((FlowAdapter)parent.getAdapter()).getItem(position);
//...
intent.putExtra(PostDetailActivity.GENERIC_UPDATE,genericUpdate);
//...
最佳答案
Java中的所有方法都是virtual ,因此您不能“不小心”在子类的对象上调用基类方法。
要查看列表中对象的运行时类型,您可以打印 genericUpdate.getClass().toString()
。
如果这给出 class com.mypackage.javaclasses.FromFriend
那么 getFriend.getName()
很可能返回 null
。如果这给出了 class com.mypackage.javaclasses.GenericUpdate
您的对象不是正确的子类型,那么 getName
的子类实现没有被调用也就不足为奇了。
(原来在这种情况下是后者。)
因此,如果您可以控制 GenericUpdate
类的代码,您可以通过将 GenericUpdate
抽象化来确保避免这种情况。 (请注意,抽象类仍然可以有字段。)
关于java - 如何调用子类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500902/