Inicializar ArrayList de la clase Type Abstract

Quiero completar valores en mi lista de matrices de tipo de clase abstracta. A continuación está mi código

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);
}

Arriba está mi clase abstracta. Ahora tengo otra clase banken la que quiero definir y declarar an arraylisten la que puedo completar mis valores. Declaré arraylist como

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

Ahora quiero pasar valores a esta lista de arrays para su uso posterior, pero no pude ya que no podemos instanciar la clase abstracta. Intenté este código para completar valores en clase con el método principal, pero no pude obtenerlo debido a la razón anterior

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

Las clases abstractas no pueden instanciarse, pero pueden ampliarse. Si la clase secundaria es concreta, se puede instanciar.

También debería implementar ambos métodos abstractos para hacer que la clase sea concreta.

Lea más aquí: herencia de Java .

Respuesta: 2

El objetivo de su clase abstracta es factorizar algún código en su aplicación. Usarlo como súper tipo es, en mi opinión, una mala práctica ya que deberías estar usando interfaces para eso.

Para obtener una respuesta completa a su problema, debería:

Crea una interfaz: Account.java

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

Cree una clase abstracta: 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;
    }
}

Y finalmente proporcione una implementación predeterminada para su interfaz 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;
    }
}

Entonces deberías manipular:

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

y nunca me importa el tipo de implementación :)

Respuesta: 3

¿No se supone que pueda hacer esto? El plegado está habilitado en las preferencias de Java, pero no aparece el botón +/- junto a los comentarios. Puedo doblar importaciones y clases y métodos, pero no comentarios. También, ...

La primera dificultad para usar JNA con J9 es que J9 JVM no incluye el paquete java.awt y la clase Native importa algunas clases de este paquete. Esto se supera fácilmente descargando ...

Parece inconsistente que en Scala, la aritmética de enteros div por cero arroje una excepción java.lang.ArithmeticException: / por cero, pero la aritmética de coma flotante (1.0 / 0.0) devuelve Double.Infinity. Entiendo ...

De la siguiente lista "foo.exe" "foo.dmg" "baz.exe" "this-is-another-file-name.exe" ... qué Java regex coincidiría con todas las cadenas que terminan con ".exe" excepto una cadena específica "baz.exe" ¡Gracias! ...