オブジェクト指向とは
オブジェクトの作成と使用
// 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! 年齢が不正です!");
}
}
}
継承や多態性については、この記事では説明しません。