Рубрики
Без рубрики

Классы и объекты Java

Исследуйте две основные концепции языка Java – классы и объекты – с примерами их реализации.

Автор оригинала: baeldung.

1. Обзор

В этом кратком руководстве мы рассмотрим два основных строительных блока языка программирования Java – классы и объекты. Это основные концепции объектно-ориентированного программирования (ООП), которые мы используем для моделирования реальных объектов.

В ООП классы являются чертежами или шаблонами для объектов. Мы используем их для описания типов сущностей.

С другой стороны, объекты-это живые существа, созданные из классов. Они содержат определенные состояния в своих областях и представляют определенное поведение с помощью своих методов.

2. Классы

Проще говоря, класс представляет собой определение или тип объекта. В Java классы могут содержать поля, конструкторы и методы.

Давайте рассмотрим пример с использованием простого класса Java, представляющего Car :

class Car {

    // fields
    String type;
    String model;
    String color;
    int speed;

    // constructor
    Car(String type, String model, String color) {
        this.type = type;
        this.model = model;
        this.color = color;
    }
    
    // methods
    int increaseSpeed(int increment) {
        this.speed = this.speed + increment;
        return this.speed;
    }
    
    // ...
}

Этот класс Java представляет автомобиль в целом. Мы можем создать любой тип автомобиля из этого класса. Мы используем поля для хранения состояния и конструктор для создания объектов из этого класса.

Каждый класс Java по умолчанию имеет пустой конструктор. Мы используем его, если не предоставляем конкретную реализацию, как это было сделано выше. Вот как конструктор по умолчанию будет выглядеть для нашего класса Car :

Car(){}

Этот конструктор просто инициализирует все поля объекта их значениями по умолчанию. Строки инициализируются следующим образом нулевой и целые числа до нуля.

Теперь у нашего класса есть определенный конструктор, потому что мы хотим, чтобы наши объекты определяли свои поля при их создании:

Car(String type, String model) {
    // ...
}

Подводя итог, мы написали класс, который определяет автомобиль. Его свойства описываются полями, которые содержат состояние объектов класса, а его поведение описывается с помощью методов.

3. Объекты

В то время как классы переводятся во время компиляции, объекты создаются из классов во время выполнения .

Объекты класса называются экземплярами, и мы создаем и инициализируем их с помощью конструкторов:

Car focus = new Car("Ford", "Focus", "red");
Car auris = new Car("Toyota", "Auris", "blue");
Car golf = new Car("Volkswagen", "Golf", "green");

Теперь мы создали разные объекты Car , все из одного класса. В этом весь смысл, чтобы определить чертеж в одном месте, а затем повторно использовать его много раз во многих местах.

До сих пор у нас есть три объекта Car , и все они припаркованы, так как их скорость равна нулю. Мы можем изменить это, вызвав наш метод увеличения скорости :

focus.increaseSpeed(10);
auris.increaseSpeed(20);
golf.increaseSpeed(30);

Теперь мы изменили состояние наших автомобилей – все они движутся с разной скоростью.

Кроме того, мы можем и должны определить управление доступом к нашему классу, его конструкторам, полям и методам. Мы можем сделать это с помощью модификаторов доступа, а также см. В следующем разделе.

4. Модификаторы доступа

В предыдущих примерах мы опустили модификаторы доступа, чтобы упростить код. При этом мы фактически использовали модификатор пакета по умолчанию-private. Этот модификатор позволяет получить доступ к классу из любого другого класса в том же пакете.

Обычно мы используем модификатор public для конструкторов, чтобы разрешить доступ ко всем другим объектам:

public Car(String type, String model, String color) {
    // ...
}

Каждое поле и метод в нашем классе также должны были определять управление доступом с помощью определенного модификатора. Классы обычно имеют модификаторы public , но мы склонны сохранять наши поля частными .

Поля содержат состояние нашего объекта, поэтому мы хотим контролировать доступ к этому состоянию. Мы можем сохранить некоторые из них частными , а другие публичными . Мы достигаем этого с помощью специальных методов, называемых геттерами и сеттерами.

Давайте взглянем на наш класс с полностью заданным контролем доступа:

public class Car {
    private String type;
    // ...

    public Car(String type, String model, String color) {
       // ...
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getSpeed() {
        return speed;
    }

    // ...
}

Наш класс помечен public , что означает, что мы можем использовать его в любом пакете. Кроме того, конструктор public , что означает, что мы можем создать объект из этого класса внутри любого другого объекта.

Наши поля помечены private , что означает , что они недоступны непосредственно из нашего объекта , но мы предоставляем доступ к ним через геттеры и сеттеры.

Поля type и model не имеют геттеров и сеттеров, поскольку они содержат внутренние данные наших объектов. Мы можем определить их только через конструктор во время инициализации.

Кроме того, цвет может быть доступен и изменен, в то время как скорость может быть доступна только, но не изменена. Мы принудительно регулировали скорость с помощью специализированных общедоступных методов увеличения скорости() и уменьшения скорости() .

Другими словами, мы используем управление доступом для инкапсуляции состояния объекта.

5. Заключение

В этой статье мы рассмотрели два основных элемента языка Java, классы и объекты, и показали, как и почему они используются. Мы также познакомили с основами контроля доступа и продемонстрировали его использование.

Чтобы изучить другие концепции языка Java, мы предлагаем прочитать о наследовании , ключевом слове super и абстрактных классах в качестве следующего шага.

Полный исходный код для примера доступен на GitHub .