У меня есть 2 подкласса (MultiCard и BasicCard), и я хочу вызвать метод (addCurrency), принадлежащий MultiCard, из класса Bank.
Этот метод используется для добавления дополнительной валюты в MultiCard, у которого есть ArrayList валют,Однако, поскольку MultiCard является подклассом класса Card, я не могу получить доступ к MultiCard.Все карты хранятся в List<Card>cards
;
Я не хочу использовать решение на основе приведения (проверка с помощью instanceof
и затем приведение экземпляра Card
к MultiCard
)
Суперкласс:
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, расширяет карту
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;
}
Метод addCurrency (), который мне нужно изменить в классе Bank
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.Он вызывает метод в 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
}