# Classes

Source: https://wisconsin.twango.dev/fa24-cs300/u2-oop/classes

# Classes

A class is a blueprint for creating objects. It defines the properties and behaviors of objects that are created from it. In Java, classes are defined using the `class` keyword.

```java
class Car {
    // Properties
    String make;
    String model;
    int year;

    // Constructor
    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    // Method
    public void drive() {
        System.out.println("Driving the car");
    }
}
```

In order to use a class, you must create an object of that class (unless used from a static context). An object is an instance of a class. You can create an object using the `new` keyword followed by the class name and parentheses.

```java
Car myCar = new Car("Honda", "Civic", 2022);
```

## Structure of Classes

### Constructors
A constructor is a special method that is called when an object is created. It is used to initialize the object's state. Constructors have the same name as the class and do not have a return type.

```java
public Car(String make, String model, int year) {
    this.make = make;
    this.model = model;
    this.year = year;
}
```

### Methods
Methods are blocks of code that perform a specific task. They define the behavior of objects in a class. Methods are defined within a class and can be called to perform a specific action.

```java
public void drive() {
    System.out.println("Driving the car");
}
```

#### Overloading Methods
Method overloading is a feature that allows a class to have multiple methods with the same name but different parameters. The methods must have different parameter lists (number of parameters, type of parameters, or order of parameters).

```java
public void drive() {
    System.out.println("Driving the car");
}

public void drive(int speed) {
    System.out.println("Driving the car at " + speed + " mph");
}
```

> [!tip]
> As long as the function signature is different, the methods can have the same name.
>

#### Default Constructor
If a class does not have any constructors defined, Java provides a default constructor that takes no arguments. If a class has any constructors defined, the default constructor is not provided.

### Accessors and Mutators
Accessors (getters) and mutators (setters) are methods that allow you to access and modify the properties of an object. Accessors are used to retrieve the values of the properties, while mutators are used to change the values of the properties.

```java
public String getMake() {
    return make;
}

public void setMake(String make) {
    this.make = make;
}
```

## Access Modifiers

Access modifiers control the visibility of classes, methods, and properties. There are four access modifiers in Java:

| Modifier    | Description                                      |
|-------------|--------------------------------------------------|
| `public`    | Accessible from any other class.                 |
| `protected` | Accessible from the same package and subclasses. |
| `private`   | Accessible only within the same class.           |
| default     | Accessible only within the same package.         |

## Source

The existing course note was retained and normalized during the merge.

Related: [[u2-oop/index|Topic index]].
