Подтвердить что ты не робот

Java - абстрактный класс для хранения переменных?

Хорошо ли использовать абстрактные классы для определения переменных экземпляра?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}

Подкласс класса ExternalJavaScript.class автоматически получит исходную переменную, но мне легче читать код, если все подклассы сами определяют источник, а не наследование.

Каков ваш совет?

/Adam

4b9b3361

Ответ 1

Я бы подумал, что что-то вроде этого будет намного лучше, поскольку вы добавляете переменную, поэтому почему бы не ограничить доступ и сделать его более чистым? Ваши геттеры/сеттеры должны делать то, что они говорят на олове.

public abstract class ExternalScript extends Script {

private String source;

public void setSource(String file) {
    source = file;
}

public String getSource() {
    return source;
}

Возвращаясь к этому вопросу, вы когда-нибудь задумывались о том, где читается код getter/setter? Если все они получают и устанавливают, вам не нужно беспокоиться о том, что функция "делает" при чтении кода. Есть еще несколько причин думать об этом:

  • Если источник был защищен (так доступен подклассам), тогда код становится беспорядочным: кто меняет переменные? Когда это объект, он становится тяжелым, когда вам нужно реорганизовать, тогда как метод имеет тенденцию облегчать этот шаг.
  • Если ваши методы getter/setter не получают и не устанавливают, то описывайте их как что-то еще.

Всегда думайте, действительно ли ваш класс другой или нет, и это должно помочь решить, нужно ли вам что-то еще.

Ответ 2

Конечно. Почему бы и нет?
Абстрактные базовые классы - это просто удобство для размещения поведения и данных, общих для 2 или более классов, в одном месте для повышения эффективности хранения и обслуживания. Его деталь реализации.
Однако обратите внимание, что вы не используете абстрактный базовый класс, где вы должны использовать интерфейс. См. Интерфейс vs Базовый класс

Ответ 3

Конечно. Вся идея абстрактных классов состоит в том, что они могут содержать какое-либо поведение или данные, которые вам требуются для всех подклассов. Подумайте о простом примере WheeledVehicle - он должен иметь переменную члена numWheels. Вы хотите, чтобы все под-классы имели эту переменную. Помните, что абстрактные классы - очень полезная функция при разработке API-интерфейсов, поскольку они могут гарантировать, что люди, которые расширяют ваш API, не нарушат его.