Herencia en Java: "No se puede encontrar el constructor de símbolos"
inheritance polymorphism (5)
Llame al método super (). Si desea llamar al constructor Cuenta (Persona), use la declaración súper (cliente); Además, esta debería ser la primera declaración en su constructor de InvestmentAccount
Estoy trabajando en una clase que hereda de otra clase, pero obtengo un error de compilación que dice "No se puede encontrar el constructor de símbolos Account ()". Básicamente, lo que estoy tratando de hacer es crear una Cuenta de Inversión de clase que se extienda desde Cuenta: la cuenta está destinada a mantener un saldo con métodos para retirar / depositar dinero y la Cuenta de Inversión es similar, pero el saldo se almacena en acciones con un precio de acción que determina cómo muchas acciones se depositan o retiran dada una determinada cantidad de dinero. Aquí están las primeras líneas (alrededor de donde el compilador señaló el problema) de la subclase InvestmentAccount:
public class InvestmentAccount extends Account
{
protected int sharePrice;
protected int numShares;
private Person customer;
public InvestmentAccount(Person customer, int sharePrice)
{
this.customer = customer;
sharePrice = sharePrice;
}
// etc...
La clase Person se mantiene en otro archivo (Person.java). Ahora aquí están las primeras líneas de la cuenta de la superclase:
public class Account
{
private Person customer;
protected int balanceInPence;
public Account(Person customer)
{
this.customer = customer;
balanceInPence = 0;
}
// etc...
¿Hay alguna razón por la cual el compilador no solo está leyendo el constructor de símbolos para la Cuenta de la clase Cuenta? ¿O necesito definir un nuevo constructor para Account dentro de InvestmentAccount, que le dice que herede todo?
Gracias
use super(customer)
en el constructor de InvestmentAccount
.
Java no puede saber cómo llamar al único constructor Account
tiene, porque no es un constructor vacío . Puede omitir super()
solo si su clase base tiene un constuctor vacío.
Cambio
public InvestmentAccount(Person customer, int sharePrice)
{
this.customer = customer;
sharePrice = sharePrice;
}
a
public InvestmentAccount(Person customer, int sharePrice)
{
super(customer);
sharePrice = sharePrice;
}
que funcionará.
Debe invocar el constructor de la superclase, de lo contrario, Java no sabrá a qué constructor está llamando para construir la superclase en la subclase.
public class InvestmentAccount extends Account {
protected int sharePrice;
protected int numShares;
private Person customer;
public InvestmentAccount(Person customer, int sharePrice) {
super(customer);
this.customer = customer;
sharePrice = sharePrice;
}
}
Debe llamar explícitamente al constructor de la clase base si la clase base no tiene un constructor predeterminado (uno sin argumentos).
En tu caso, el constructor debería ser:
public InvestmentAccount(Person customer, int sharePrice) {
super(customer);
sharePrice = sharePrice;
}
¡Y no redefina al customer
como una variable de instancia de la subclase!
Defina un constructor predeterminado en la clase de la Account
:
public Account() {}
O llame a super(customer)
en el constructor de InvestmentAccount
.