gpt4 book ai didi

java - 无法从接口(interface)调用抽象类方法

转载 作者:行者123 更新时间:2023-11-30 06:24:35 25 4
gpt4 key购买 nike

我很难掌握接口(interface)编程和同时使用抽象类的概念。

我有一组“Retriever”类,可以从 Internet 检索不同类型的数据。这些检索器类检索 JSON 响应字符串

public class AccountRetriever extends DataRetriever implements AccountInformation{
List<String> getAccountInformation{
....
}
}

public class BalanceRetriever extends DataRetriever implements BalanceInformation{
List<String> getBalanceInformation{
....
}
}

AccountInformation 和 BalanceInformation 都是具有其中所示方法的接口(interface)。我还从一个抽象类“DataRetriever”扩展,它有一个名为

的方法
public String getResponseAsString();

在我的主要使用接口(interface)中实例化这些类后:

AccountInformation ai = new AccountRetriever(apiRequest);
List<String> aiList = ai.getAccountInformation(); <----this works
ai.getResponseAsString(); <----this doesn't work. Why??

BalanceInformation bi = new BalanceRetriever(apiRequest);
List<String> biList = bi.getBalanceInformation(); <----this works
bi.getResponseAsString(); <----this doesn't work. Why??

getResponseAsString() 方法存在于每个检索器扩展的抽象类中,那么为什么我无法访问该方法?我唯一可以访问的方法是界面中的方法。我在这里做错了什么?

最佳答案

这些方法不是 visbale,因为当您构造 AccountRetriever 时,您的 ai 变量仅为 AccountInformation 类型,该接口(interface)仅有 getAccountInformation() 而不是 getResponseAsString()

AccountInformation ai = new AccountRetriever(apiRequest);
List<String> aiList = ai.getAccountInformation(); <----this works
ai.getResponseAsString(); <----this doesn't work. Why??

但是,如果将变量类型更改为 DataRetriever,则 getAccountInformation() 将可见,但 getAccountInformation() 将不可见。

DataRetriever ai = new AccountRetriever(apiRequest);
List<String> aiList = ai.getAccountInformation(); <----this wont work
ai.getResponseAsString(); <---- this will work

您需要将变量类型更改为 AccountRetriever,它既扩展 DataRetriever 又实现 AccountInformation

AccountRetriever ai = new AccountRetriever(apiRequest);
List<String> aiList = ai.getAccountInformation(); <----this will work
ai.getResponseAsString(); <---- this will work

或者,更改您的设计,以便 AccountInformationBalanceInformation 都扩展一个定义 getResponseAsString() 的通用接口(interface)。并将抽象类全部删除。

public interface Information {
public String getResponseAsString();
}

public interface AccountInformation extends Information {
public List<String> getAccountInformation();
}

public interface BalanceInformation extends Information {
public List<String> getBalanceInformation();
}

关于java - 无法从接口(interface)调用抽象类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466072/

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