Java 如何区分超类的ArrayList中的子类
我有2个子类(MultiCard和BasicCard),我想从类Bank中调用属于MultiCard的方法(addCurrency)。Java 如何区分超类的ArrayList中的子类,java,object,inheritance,Java,Object,Inheritance,我有2个子类(MultiCard和BasicCard),我想从类Bank中调用属于MultiCard的方法(addCurrency)。该方法用于在具有货币数组列表的MultiCard中添加更多货币。但是,由于MultiCard是class Card的子类,因此我无法访问MultiCard。所有卡都存储在列表卡中 我不想使用基于强制转换的解决方案(检查实例的,然后将卡的实例强制转换为多卡的) 超级班: public abstract class Card implements Comparable
该方法用于在具有货币数组列表的MultiCard中添加更多货币。但是,由于MultiCard是class 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>();
}
由于这个问题有点让人困惑,我假设当您调用user.getACard(carid,username,password)
方法时,您得到的是Card
对象。理想的修复方法是调用addCurency()
方法,
您可以在Card类中添加抽象方法public boolean addCurrency(String currency)
(如果允许修改Card类)。
否则,您必须将卡
对象强制转换为多卡
对象 由于这个问题有点让人困惑,我假设当您调用user.getACard(carid,username,password)
方法时,您得到的对象是Card
。理想的修复方法是调用addCurency()
方法,
您可以在Card类中添加抽象方法public boolean addCurrency(String currency)
(如果允许修改Card类)。
否则,您必须将卡
对象强制转换为多卡
对象 请分享完整的代码。你的问题很令人困惑,我不明白你想达到什么目的。你好,我已经编辑了我的question@GlenioAlsinTan你已经编辑了这个问题,是的。但你没有说得更清楚。你的问题是什么?假设我们对您的代码一无所知(因为我们不知道),也不知道您想做什么(因为我们不知道)。:)@我猜是Abra数据结构。请分享完整的代码。你的问题很令人困惑,我不明白你想达到什么目的。你好,我已经编辑了我的question@GlenioAlsinTan你已经编辑了这个问题,是的。但你没有说得更清楚。你的问题是什么?假设我们对您的代码一无所知(因为我们不知道),也不知道您想做什么(因为我们不知道)。:)@我猜是Abra的数据结构。谢谢你的理解,这是下档吗?你知道克隆卡片的最好方法是什么吗,因为它是一个抽象对象,所以我使用了一个抽象的clone()并创建了clone()到子类,但是我得到了null*对不起,我的问题是混淆英语不是我的第一语言。演员阵容不会是向下的user.getACard(…)
总是返回一个具体的对象(即MultiCard的对象)。但是,由于此方法的返回类型是Card类型,因此具体的Multicard对象总是被Card引用引用。当你在这里浇铸时,你只是将具体对象的参考更具体地用于Multicard。谢谢你的理解,浇铸是向下浇铸吗?你知道克隆卡片的最好方法是什么吗,因为它是一个抽象对象,所以我使用了一个抽象的clone()并创建了clone()到子类,但是我得到了null*对不起,我的问题是混淆英语不是我的第一语言。演员阵容不会是向下的user.getACard(…)
总是返回一个具体的对象(即MultiCard的对象)。但是,由于此方法的返回类型是Card类型,因此具体的Multicard对象总是被Card引用引用。当您在这里进行铸造时,您只是使具体对象的引用更特定于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;
}
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) { ...
}
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
}