java - 如何调用子类的方法?

标签 java oop

我有一个这样的父类(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/

相关文章:

Java:空白索引问题

java - 错误: ORA-01008: not all variables bound call SQL function

java - 从 EntityManagerFactory 创建 EntityManager

c++ - 私有(private)方法实现编译报错

javascript - 如何将购物车数组与产品数组链接起来?

javascript - 此示例使用什么 javascript 对象模式?

C++:使用运算符 = 调用多参数构造函数

java - 将 spring security xml 转换为注解

java - 如何更新 arraylist<arraylist<Integer>> 中的值

php - php5函数参数是作为引用还是作为副本传递的?