初始化Type Abstract类的ArrayList

时间:2016-04-01 13:12:08

标签: java arraylist abstract-class

我想在抽象类类型的arraylist中填充值.Below是我的代码

public abstract class Account {
    private int accountId;
    private int customerId;
    private double balance;

    public Account(int accountId, int customerId, double balance) {
        this.accountId = accountId;
        this.customerId = customerId;
        this.balance = balance;
    }

    public abstract double deposit(double sum);
    public abstract double withdraw(double sum);
}

上面是我的抽象类。 现在我有另一个类bank我要在其中定义并声明an arraylist,我可以在其中填充我的值。 我宣称arraylist为

ArrayList<Account> al=new ArrayList<>();

现在我想将值传递给这个arraylist以供进一步使用,但我不能因为我们无法实例化抽象类。我尝试使用main方法在类中填充值但由于上述原因无法获取它

Account ac= new Account(1,100,25000);
    ArrayList<Account>ac= new ArrayList<Account>();
    ac.add(ac);

4 个答案:

答案 0 :(得分:2)

抽象类无法实例化,但可以扩展它们。如果子类是具体的,则可以实例化它。

您还必须实现两种抽象方法,以使该类具体化。

在此处阅读更多内容:Java inheritance

答案 1 :(得分:2)

抽象类的重点是分解应用程序中的一些代码。在我看来,使用它作为超级类型是一种不好的做法,因为你应该使用接口。

为了对您的问题做出完整的回应,我会:

创建一个界面:Account.java

public interface Account {
    public double deposit(double sum);
    public double withdraw(double sum);
}

创建一个抽象类:AbstractAccount.java

public abstract class AbstractAccount {
    protected int accountId;
    protected int customerId;
    protected double balance;
    public Account(int accountId, int customerId, double balance) {
        this.accountId = accountId;
        this.customerId = customerId;
        this.balance = balance;
    }
}

最后为您的界面BankAccount.java提供默认实现

public class BankAccount extends AbstractAccount implements Account {
    public Account(int accountId, int customerId, double balance) {
        super(accountId, customerId, balance);
    }
    public double deposit(double sum) {
        this.balance += sum;
    }
    public double withdraw(double sum) {
        this.balance -= sum;
    }
}

然后你应该操纵:

List<Account> accounts = new ArrayList<Account>();
accounts.add(new BankAccount(1, 1, 10000));

并且从不关心实现类型:)

答案 2 :(得分:1)

您可以添加以下代码,以帮助您入门:

public class ConcreteAccount extends Account{
    public ConcreteAccount (int accountId, int customerId, double balance) {
        super(accountId, customerId, balance);
    }

    public abstract double deposit(double sum) {
       //implementation here
    }
    public abstract double withdraw(double sum) {
       //implementation here
    }
}

然后,你可以:

Account ac= new ConcreteAccount(1,100,25000);
ArrayList<Account> acList= new ArrayList<Account>();
acList.add(ac);

答案 3 :(得分:0)

标记类抽象意味着它可能具有未实现的方法,因此,由于未定义的行为,您无法直接创建抽象类的实例。你可以做的是定义一个非抽象类,它扩展你的Account类并在Account中实现两个抽象方法。像class BankAccount extends Account { implementations }这样的东西。之后,您可以创建类BankAccount的实例并将其添加到ArrayList实例中。扩展Account的其他类实例也可以添加到ArrayList实例中。