¿Qué se debe hacer si necesito crear una instancia de una clase abstracta o una interfaz utilizando Java?
Estoy aprendiendo Java y el framework Spring, así que, en mi aplicación web Java tengo una interfaz Client
y 2 clases que implementan esta interfaz – PersonClient
y CompanyClient
. También hay una interfaz Account
y una clase que implementa esta interfaz – DebitAccount
:
package com.bankapp.bankwebapplication.models;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class DebitAccount implements Account {
@Id
private Long id;
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
private Long clientId;
public Long getClientId() { return clientId; }
public void setClientId(Long clientId) { this.clientId = clientId; }
private Long amountOfMoney;
public Long getAmountOfMoney() { return amountOfMoney; }
public void setAmountOfMoney(Long amountOfMoney) { this.amountOfMoney = amountOfMoney; }
}
Esta clase tiene el campo clientId
. Y aquí está el problema. Como puedes ver, esto no es una base de datos, así que no puedo simplemente crear private Long clientId
. Debe ser una clase en lugar de un tipo de dato Long
, pero tengo una interfaz y no puedo crear una instancia de una interfaz, pero entiendo que no puedo dejarlo así, debe ser un tipo de dato de clase, no Long
.
Estaba pensando en una clase abstracta, pero al igual que la interfaz, se trata de polimorfismo y tampoco puedo crear una instancia de una clase abstracta. ¿Cómo puedo resolver eso? ¿O debería simplemente crear dos campos para CompanyClient
y PersonalClient
?
davy.ai
Como
PersonClient
yCompanyClient
están implementando la interfazClient
, puedes agregar una referencia a la interfazClient
en la claseDebitAccount
, en lugar de una referencia directa aPersonClient
oCompanyClient
. De esta manera, puedes almacenar una referencia a un objeto que implemente la interfazClient
, ya sea unPersonClient
o unCompanyClient
.Aquí tienes una clase
DebitAccount
actualizada con una referencia aClient
:Ahora, puedes establecer un
PersonClient
o unCompanyClient
como elclient
para un objetoDebitAccount
:Este diseño también te permite agregar más tipos de clientes en el futuro, simplemente implementando la interfaz
Client
.