目次

  • クラス定義
  • オブジェクトとインスタンス化
  • 属性とコンストラクタ
  • 操作(メソッド)定義と呼び出し
  • 参照型変数(オブジェクト変数)
  • 継承
  • オーバーライド

クラス定義

  • class を使って定義する
  • クラス名は慣例的に頭大文字
  • ファイル名とクラス名は一致させるのが原則
class クラス名 {
  // クラス定義の内容
}

  • Javaでは以下のように属性やメソッドを記述する
class クラス名 {
  int 属性1 = 初期値;
  int 属性2 = 初期値;

  void メソッド名(引数型 引数名) {
    // 処理内容
  }
}

  • ドラクエっぽいゲームの例
class Yusha {
  String job = "Yusha";
  int lv = 1;
  int hp = 0;
  int mp = 0;
}

class Kenshi {
  String job = "Kenshi";
  int lv = 1;
  int hp = 0;
  int mp = 0;
}

class Slime {
  String job = "Slime";
  int lv = 1;
  int hp = 0;
  int mp = 0;
}

class Mimic {
  String job = "Mimic";
  int lv = 1;
  int hp = 0;
  int mp = 0;
}

インスタンス化と変数

  • new クラス名() としてインスタンスを生成
  • オブジェクトの属性へのアクセスは .(ピリオド)を使う
class Yusha {
  String job = "Yusha";
  int lv = 1;
  int hp = 0;
  int mp = 0;
}

public class Main {
  public static void main(String[] args) {
    Yusha a = new Yusha();
    Yusha b = new Yusha();
    System.out.println(a.job);

    a.hp = 100;
    System.out.println(a.hp); // 100
    System.out.println(b.hp); // 0

    b = a;
    b.hp = 1000;
    System.out.println(b.hp); // 1000
    System.out.println(a.hp); // 1000
  }
}

操作(メソッド)

  • メソッドはクラス内に定義
  • 自身の属性には this を使ってアクセス
class Yusha {
  String job = "Yusha";
  int lv = 1;
  int hp = 0;
  int mp = 0;

  void damage(int x) {
    this.hp -= x;
  }

  void heal(int x) {
    this.hp += x;
  }
}

public class Main {
  public static void main(String[] args) {
    Yusha a = new Yusha();
    a.hp = 100;
    System.out.println(a.hp); // 100
    a.damage(10);
    System.out.println(a.hp); // 90
    a.heal(11);
    System.out.println(a.hp); // 101
  }
}

コンストラクタ

  • クラスと同名のメソッドで定義
  • オブジェクト生成時に自動で呼び出される
class Yusha {
  String job = "Yusha";
  int lv = 1;
  int hp;
  int mp;

  Yusha(int hp, int mp) {
    this.hp = hp;
    this.mp = mp;
  }
}

public class Main {
  public static void main(String[] args) {
    Yusha a = new Yusha(10, 20);
    System.out.println(a.hp); // 10
    System.out.println(a.mp); // 20
  }
}

継承

  • extends を使って継承を定義
  • 親の属性・メソッドを子が受け継ぐ
class Player {
  String job;
  int lv = 1;
  int hp = 0;
  int mp = 0;

  void printJob() {
    System.out.println(job);
  }
}

class Yusha extends Player {
  Yusha() {
    this.job = "Yusha";
  }
}

class Kenshi extends Player {
  Kenshi() {
    this.job = "Kenshi";
  }
}

public class Main {
  public static void main(String[] args) {
    Yusha a = new Yusha();
    a.printJob();
    System.out.println(a.hp);
    Kenshi b = new Kenshi();
    b.printJob();
    System.out.println(b.hp);
  }
}

オーバーライド

  • 親クラスのメソッドを子クラスで再定義する
  • 親のメソッドを呼びたい場合は super.メソッド名() を使う
class Player {
  String job;
  int lv = 1;
  int hp = 0;
  int mp = 0;

  void printJob() {
    System.out.println(job);
  }
}

class Yusha extends Player {
  Yusha() {
    this.job = "Yusha";
  }

  @Override
  void printJob() {
    super.printJob();
    System.out.println("Yusha desu");
  }
}

class Kenshi extends Player {
  Kenshi() {
    this.job = "Kenshi";
  }
}

public class Main {
  public static void main(String[] args) {
    Yusha a = new Yusha();
    a.printJob();
    System.out.println(a.hp);
    Kenshi b = new Kenshi();
    b.printJob();
    System.out.println(b.hp);
  }
}