オブジェクト指向プログラミングの基礎

オブジェクト指向とは

オブジェクトの作成と使用
// Personクラスの定義
class Person {
    String fullName;
    int yearsOld;
    int idNumber;

    public void displayInfo() {
        System.out.println("名前: " + fullName + ", 年齢: " + yearsOld + ", ID: " + idNumber);
    }
}

// アプリケーションエントリポイント
public class App {
    public static void main(String[] args) {
        Person personObj = new Person();  // オブジェクトの生成
        personObj.displayInfo();  // 初期値 (null, 0, 0)

        // メンバ変数の設定
        personObj.fullName = "John";
        personObj.yearsOld = 25;
        personObj.idNumber = 123456;
        personObj.displayInfo();  // 結果表示
    }
}
注意点
  • クラス名は英字を使用し、先頭の文字を大文字にしてキャメルケース形式で記述することをお勧めします。例: Person, Car
  • クラス内で定義された変数はメンバ変数(オブジェクトのプロパティ)と呼ばれ、定義されたメソッドはメンバメソッド(オブジェクトの動作)と呼ばれます。
  • クラスを定義する際に、メンバ変数にはデフォルト値が設定されます。特殊な初期化が必要ない限り、明示的な初期化は不要です。
  • 同じファイル内に複数のclassを記述できますが、public修飾子を持つクラスは1つしか存在できません。そのクラス名はファイル名と一致させる必要があります。
オブジェクト指向に関する他の知識
  • this: 変数名の衝突を解決するために使用されます。
public class App {
    public static void main(String[] args) {
        Member member = new Member();
        System.out.println("名前: " + member.userName + ", 年齢: " + member.userAge + ", ID: " + member.userId);

        member.setDetails("Alice", 30, 987654);
        System.out.println("名前: " + member.userName + ", 年齢: " + member.userAge + ", ID: " + member.userId);
    }
}

class Member {
    String userName;
    int userAge;
    int userId;

    public void setDetails(String name, int age, int id) {
        this.userName = name;
        this.userAge = age;
        this.userId = id;
    }
}

コンストラクタ

  • コンストラクタの特徴: オブジェクトが生成されるときに自動的に呼び出されます。
  • 主な使用場面: オブジェクトを作成する際に、メンバ変数(プロパティ)を初期化して値を設定します。
public class App {
    public static void main(String[] args) {
        Player player = new Player("Sam", 28, 654321);
        System.out.println("名前: " + player.name + ", 年齢: " + player.age + ", ID: " + player.playerId);
    }
}

class Player {
    String name;
    int age;
    int playerId;

    // 引数なしコンストラクタ
    public Player() {
        System.out.println("引数なしコンストラクタが実行されました");
    }

    // 引数ありコンストラクタ
    public Player(String playerName, int playerAge, int playerId) {
        System.out.println("引数ありコンストラクタが実行されました");
        this.name = playerName;
        this.age = playerAge;
        this.playerId = playerId;
    }
}
  • 注意事項:

  • クラスにコンストラクタが明示的に定義されていない場合、Javaは自動的にデフォルトコンストラクタ(引数なし)を生成します。

  • 引数付きコンストラクタを定義すると、デフォルトコンストラクタは自動生成されなくなります。そのため、必要に応じて手動で追加してください。

  • 三大特性

  • カプセル化: 必要な情報を適切に隠蔽し、必要な部分だけを公開します。

  • 公開メンバー: public修飾子を使用してアクセス可能にします。

  • 隠蔽メンバー: private修飾子を使用して直接のアクセスを禁止します。

public class App {
    public static void main(String[] args) {
        User user = new User(30);
        System.out.println(user.getAge());  // 30
        user.setAge(45);
        System.out.println(user.getAge());  // 45
        user.setAge(-5);  // Error! 年齢が不正です!
    }
}

class User {
    private int age;  // 直接のアクセスと変更を禁止

    public User(int initialAge) {
        this.age = initialAge;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int newAge) {
        if (newAge > 0 && newAge <= 120) {
            this.age = newAge;
        } else {
            System.out.println("Error! 年齢が不正です!");
        }
    }
}

継承や多態性については、この記事では説明しません。

タグ: Java オブジェクト指向 カプセル化

8月5日 01:29 投稿