gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:58:12 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com