Наследование в 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.