Как назначить параметры конструктора для членов - PullRequest
1 голос
/ 12 апреля 2019

Я новичок в Java, и я бы тоже хотел знать, как правильно назначать значения внутри конструктора с параметрами. Вопрос в том, как правильно инкапсулировать значения, то есть мы используем set методы или достаточно просто использовать ключевое слово this? Обратите внимание, что я спрашиваю об инкапсуляции и ООП.

public class cars{
    private String make;
    private String model;
    public String getMake(){
        return make;
    }
    public String getModel(){
        return model;
    }
    public void setMake(String ParamMake){
        this.make = ParamMake;
    }
    public void setModel(String ParamModel){
        this.model = ParamModel;
    }

    // Should it use the setter
    public cars(String make,String model){
        setModel(model);
        setMake();
    }
    // Or
    public cars(String make,String model){
        this.model = mode;
        this.make = make;
    }
}

Ответы [ 4 ]

2 голосов
/ 12 апреля 2019

Об этом есть две школы мысли:

  1. Никогда не вызывать переопределенные методы из конструктора, кроме сеттеров; если у вас есть сеттер, всегда используйте его, поэтому назначение члену происходит только в одном центральном месте.

  2. Никогда не вызывайте переопределенные методы из конструктора, даже из сеттеров; просто назначьте напрямую, например, this.make = make;.

Я считаю, что # 2 - более приемлемая школа мысли. Проблема с # 1 состоит в том, что если подкласс переопределяет установщик, вы можете получить трудные для понимания перекрестные помехи между классами во время построения.


Примечание: у Java хорошо соблюдаются соглашения об именах. Имена классов должны начинаться с заглавной буквы; имена переменных, параметров и методов не должны. То есть Cars, а не cars и paramModel, а не ParamModel.


¹ «переопределяемый» - например, не private, не final методы.

0 голосов
/ 12 апреля 2019

Второй подход хорош,

public cars(String make,String model){
          this.model = mode;
          this.make = make;
         }

Также обратите внимание, что, поскольку вы новичок в Java, в будущем вы можете передавать другие объекты классов в конструктор классов, использование вышеуказанного способа поможет вамделать инъекцию зависимостей.

0 голосов
/ 12 апреля 2019

В этом посте вы найдете то, что ищете,

Инкапсуляция против сокрытия данных - Java

В более общем смысле инкапсуляция относится просто к объединению данных (например, объекта) с операциями над этими данными.Таким образом, у вас есть класс, инкапсулирующий поля данных - вместе с методами для манипулирования этими данными.

Примечание: Это поможет вам разобраться в концепции инкапсуляции.

Для ваших конкретных ответов это стандарт для использования this.variableName = variableName, где variableName - ваша переменная.

0 голосов
/ 12 апреля 2019

Использование this. - это то, что вы хотите, геттеры / сеттеры предназначены для внешних классов, которые не могут читать поля из-за их приватности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...