Наследование в Java - "Не удается найти конструктор символов"
Я работаю над классом, который наследуется от другого класса, но я получаю сообщение об ошибке компилятора "Не могу найти конструктор символов Account()". В основном то, что я пытаюсь сделать, это сделать класс InvestmentAccount, который распространяется на Account-Account, предназначен для поддержания баланса с методами снятия/депонирования денег, а InvestmentAccount аналогичен, но баланс хранится в акциях с ценой акций, определяющей, как многие акции депонируются или изымаются с учетом определенной суммы денег. Здесь первые несколько строк (вокруг которых компилятор указал на проблему) подкласса 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...
Класс Person хранится в другом файле (Person.java). Теперь здесь первые несколько строк учетной записи суперкласса:
public class Account
{
private Person customer;
protected int balanceInPence;
public Account(Person customer)
{
this.customer = customer;
balanceInPence = 0;
}
// etc...
Есть ли причина, по которой компилятор не просто считывает конструктор символов для учетной записи из класса Account? Или мне нужно определить новый конструктор для учетной записи в InvestmentAccount, который говорит ему наследовать все?
Спасибо
Ответы
Ответ 1
используйте super(customer)
в конструкторе InvestmentAccount
.
Java не может знать, как вызвать конструктор только Account
, потому что это не пустой конструктор. Вы можете опустить super()
, только если ваш базовый класс имеет пустой constuctor.
Изменить
public InvestmentAccount(Person customer, int sharePrice)
{
this.customer = customer;
sharePrice = sharePrice;
}
к
public InvestmentAccount(Person customer, int sharePrice)
{
super(customer);
sharePrice = sharePrice;
}
который будет работать.
Ответ 2
Вы должны вызвать конструктор суперкласса, иначе Java не будет знать, какой конструктор вы вызываете для сборки суперкласса в подклассе.
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;
}
}
Ответ 3
Вы должны вызвать конструктор базового класса явно, если базовый класс не имеет конструктора по умолчанию (один без аргументов).
В вашем случае конструктор должен быть:
public InvestmentAccount(Person customer, int sharePrice) {
super(customer);
sharePrice = sharePrice;
}
И не переопределяйте customer
как переменную экземпляра подкласса!
Ответ 4
Вызвать метод super(). Если вы хотите вызвать конструктор Account (Person), используйте оператор super (клиент); Также это должно быть первое условие в вашем InvestmentAccount
конструктор
Ответ 5
Определите конструктор по умолчанию в классе Account
:
public Account() {}
Или вызовите super(customer)
в конструкторе InvestmentAccount
.