Javaオブジェクトと継承

今回はjavaのオブジェクトと継承について記事にしたいと思います。

1. オブジェクトとは？
オブジェクトとは、**データ（プロパティ）と、そのデータに対する動作（メソッド）**を持つものです。例えば、現実世界の「車」をプログラム内で表現すると、オブジェクトに「色」「メーカー」「速度」などのデータ（プロパティ）を持たせ、さらに「加速する」「ブレーキをかける」などの動作（メソッド）を持たせることができます。

オブジェクトはクラスという設計図を基にして作られます。クラスを定義し、そのクラスからインスタンス（実体）としてオブジェクトを作成します。

オブジェクトの例（クラスとインスタンス）：
```java
class Car {
    // プロパティ（フィールド）
    String color;
    String brand;
    int speed;

    // メソッド（動作）
    void accelerate() {
        speed += 10;
        System.out.println("Speed is now: " + speed);
    }

    void brake() {
        speed -= 10;
        System.out.println("Speed is now: " + speed);
    }
}

public class Main {
    public static void main(String[] args) {
        // Carクラスからインスタンスを作成
        Car myCar = new Car();
        myCar.color = "Red";
        myCar.brand = "Toyota";
        myCar.speed = 0;

        System.out.println("Car brand: " + myCar.brand);  // Toyota
        myCar.accelerate();  // Speed is now: 10
        myCar.brake();       // Speed is now: 0
    }
}

```

2. クラスとオブジェクトの作成
2.1 クラスの定義
クラスはオブジェクトの設計図のようなもので、オブジェクトの持つプロパティやメソッドを定義します。クラスを作るためには、以下のように定義します。

```java
class クラス名 {
    // プロパティ（フィールド）
    データ型 プロパティ名;
    
    // メソッド
    void メソッド名() {
        // メソッドの処理
    }
}
```

2.2 オブジェクトの作成
クラスからオブジェクトを作成するには、new キーワードを使ってインスタンス化します。
```java
クラス名 オブジェクト名 = new クラス名();
```

3. オブジェクトの操作
作成したオブジェクトには、プロパティを設定したり読み取ったり、メソッドを使って動作をさせたりできます。

プロパティの設定：
```java
myCar.color = "Blue";  // オブジェクトのプロパティに値を設定
```


プロパティの読み取り：
```java
System.out.println(myCar.color);  // プロパティの値を読み取る
メソッドの呼び出し：
myCar.accelerate();  // メソッドを呼び出す
```

4. コンストラクタ
コンストラクタは、オブジェクトを作成するときに初期化処理を行う特別なメソッドです。コンストラクタを使って、オブジェクトを作成する際に値を設定することができます。コンストラクタはクラス名と同じ名前を持ち、戻り値を持ちません。

コンストラクタの例：
```java
class Car {
    String color;
    String brand;
    int speed;

    // コンストラクタ
    Car(String color, String brand) {
        this.color = color;
        this.brand = brand;
        this.speed = 0;
    }

    void accelerate() {
        speed += 10;
        System.out.println("Speed is now: " + speed);
    }
}

public class Main {
    public static void main(String[] args) {
        // コンストラクタで初期値を設定してオブジェクトを作成
        Car myCar = new Car("Red", "Honda");
        System.out.println("Car color: " + myCar.color);  // Red
        System.out.println("Car brand: " + myCar.brand);  // Honda
    }
}
```

5. カプセル化
カプセル化とは、オブジェクトの内部のデータ（プロパティ）を外部から直接変更できないようにする仕組みです。Javaでは、プロパティをprivateにして、外部からアクセスするためのgetterやsetterメソッドを用意します。

カプセル化の例：
```java
class Car {
    private String color;
    private String brand;
    private int speed;

    // コンストラクタ
    Car(String color, String brand) {
        this.color = color;
        this.brand = brand;
        this.speed = 0;
    }

    // getter メソッド（値を取得）
    public String getColor() {
        return color;
    }

    // setter メソッド（値を設定）
    public void setColor(String color) {
        this.color = color;
    }

    void accelerate() {
        speed += 10;
        System.out.println("Speed is now: " + speed);
    }
}

public class Main {
    public static void main(String[] args) {
        Car myCar = new Car("Red", "Honda");
        
        // カプセル化されたプロパティにアクセス
        System.out.println("Car color: " + myCar.getColor());  // Red
        
        // カプセル化されたプロパティを変更
        myCar.setColor("Blue");
        System.out.println("New car color: " + myCar.getColor());  // Blue
    }
}
```

6. 継承
継承とは、既存のクラス（親クラス）を元にして、新しいクラス（子クラス）を作ることです。子クラスは親クラスのプロパティやメソッドを引き継ぎ、さらに新しい機能を追加できます。

継承の例：
```java
class Animal {
    String name;

    void eat() {
        System.out.println(name + " is eating");
    }
}

// DogクラスはAnimalクラスを継承
class Dog extends Animal {
    void bark() {
        System.out.println(name + " is barking");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.name = "Rex";
        myDog.eat();  // Rex is eating
        myDog.bark(); // Rex is barking
    }
}
```

7. 多態性（ポリモーフィズム）
**多態性（ポリモーフィズム）**は、同じメソッド名でも、異なるクラスで異なる振る舞いをするようにできることです。継承関係にあるクラスで特に使われます。

多態性の例：
```java
class Animal {
    void sound() {
        System.out.println("Some animal sound");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("Bark");
    }
}

class Cat extends Animal {
    void sound() {
        System.out.println("Meow");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myAnimal.sound();  // Some animal sound
        myDog.sound();     // Bark
        myCat.sound();     // Meow
    }
}
```
まとめ
オブジェクトは、データとそのデータに関連する動作を持つプログラムの基本要素。
クラスは、オブジェクトの設計図で、クラスからオブジェクト（インスタンス）を作成する。
カプセル化は、データを隠蔽し、外部から直接アクセスできないようにする仕組み。
継承を使うことで、既存のクラスを拡張して新しいクラス

今回はjavaのオブジェクトと継承について記事にしてみました。