Javaによるオブジェクト指向プログラミング
目次
- クラス定義
- オブジェクトとインスタンス化
- 属性とコンストラクタ
- 操作(メソッド)定義と呼び出し
- 参照型変数(オブジェクト変数)
- 継承
- オーバーライド
クラス定義
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);
}
}