java - 如何区分父类(super class)的ArrayList中的子类

标签 java object inheritance

我有 2 个子类(MultiCard 和 BasicCard),我想从 Bank 类中调用属于 MultiCard 的方法(addCurrency)。
该方法用于在 MultiCard 中添加更多货币,该 MultiCard 的 ArrayList 为货币。但是,由于 MultiCard 是 Card 类的子类,因此我无法访问 MultiCard。所有卡片都存储在 List<Card>cards 中;

我不想使用基于转换的解决方案(使用 instanceof 检查,然后将 Card 实例转换为 MultiCard )

super 类:

public abstract class Card implements Comparable<Card>, Cloneable
{
protected String id;
protected String name;
protected List<Purchase> purchases;
static int counter = 1000;

public Card(String name)
{
    counter++;
    this.id = Integer.toString(counter);
    this.name = name;
    this.purchases = new ArrayList<Purchase>();
}

我想在 MultiCard 类中使用的方法扩展了 Card

public class MultiCard extends Card implements Cloneable
{
protected static List<String> currencies;
protected double[] balance;
public static final int currencyCount = 5;
public MultiCard (String name)
{
    super (name);
    currencies = new ArrayList<String>();
    balance = new double[currencyCount];
    currencies.add ("AUD");
    for (int i = 0; i < balance.length; i++)
        balance[i] = 0;
}
public boolean addCurrency (String currency)
{
    if (currencies.size () == currencyCount ||containsCurrency (currency)) {
        return false;
    }
    currencies.add (currency);
    return true;
}

我需要在 Bank 类中修改方法 addCurrency()

private static final String[] currencyLabel = { "AUD", "NZD", "USD", "CND", "YEN", "BPD" };
private static final double[] currencyRate = { 1.0, 1.2, 0.75, 0.85, 80, 0.7 };
private String adminUsername;
private String adminPassword;

Map<String, User> users = new HashMap<>();// username

public Bank(String admName, String admPassword){
    this.adminUsername  = admName;
    this.adminPassword = admPassword;
public boolean addCurrency(String cardID, String username, String password, String currency) { ...
}

addCurrency 方法用于在 MultiCard 的 List 中添加货币。它调用MultiCard中的方法

这是我尝试过的:

public boolean addCurrency(String cardID, String username, String password, String currency)
{
   User user = users.get(username);
   user.getACard(cardID, username, password); // here is my problem - a Card instance is returned, which must be cast to a MultiCard

}

最佳答案

由于问题有点令人困惑,我假设当您调用 user.getACard(cardID, username, password) 方法时,您将获取 Card 的对象> .理想的修复方法是调用 addCuency() 方法, 您可以在 Card 类中添加一个抽象方法 public boolean addCurrency (Stringcurrency) (如果允许您修改 Card 类的话)。 否则,您必须将 Card 对象转换为 MultiCard 对象。

关于java - 如何区分父类(super class)的ArrayList中的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860787/

相关文章:

java - Camel,Amazon SQS - 没有类型转换器可用于将类型 : java. lang.String 转换为所需类型 : com. amazonaws.services.sqs.AmazonSQS

java - 尝试使用 POI 写入空单元格时出现空指针

java - 由于 Java SimpleDateFormat 问题,在 Oracle DB 中保存时间数据(带区域)无法正常工作

java - org.hibernate.TransientObjectException : object is an unsaved transient instance - save the transient instance before merging

ios - 访问可变数组时遇到问题

Javascript 数组或对象

javascript - 合并对象: Problem with comparing and merge two objects in javascript

Java:JSONObject继承

python - 继承最佳实践 : *args, **kwargs 或显式指定参数

python - Python中的继承有什么意义?