はじめに:Javaのクラスってなんだか難しそう?
Javaを学び始めたばかりの人にとって、「クラス」という言葉はとても抽象的に感じられるかもしれません。メソッドの書き方は少しずつ理解できてきたのに、急に class
や new
、this
などのキーワードが登場して、混乱してしまうこともあるでしょう。
この記事では、Javaの基本である「クラス」について、初心者にもわかりやすい言葉で丁寧に解説していきます。
この記事で学べること
このページでは、Java初心者が「クラスって何?」という疑問を解消し、クラスの使い方に自信が持てるようになることを目指しています。以下のような内容をやさしく紹介しています。
- Javaにおけるクラスの役割と必要性
- クラスの中に記述する要素(変数=フィールド、コンストラクタ、メソッド)
- オブジェクト(インスタンス)の作り方と具体的な使い方
- 初学者がつまづきやすい
this
やprivate
の意味と使用例
これらを一つずつ理解することで、Javaの基礎力がぐんとアップします。
Javaのクラスとは?「設計図」と「オブジェクト」の関係
Javaでは、現実のモノや概念をプログラム上で表現する際に、「クラス」という考え方を使います。たとえば「自動車」を表現したい場合、その車がどんな種類で、どんな色でどんな行動ができるのかをJavaに伝える必要があります。
このとき、クラスは「自動車がどのような仕様か」という情報を定義する設計図のようなものです。そして、その設計図を元にして作られる実体、「車」や「バス」、「消防車」といったそれぞれの種類の自動車がオブジェクト(インスタンス)です。
つまり、
- クラス = 設計図
- オブジェクト(インスタンス) = 設計図をもとに作った具体的なモノ
という関係になります。
もう一つ例を挙げます。
もし「勇者」をJavaで表現したい場合、その勇者が何歳で、どんな名前で、どんな行動ができるのかを決めます。
このとき、クラスは「勇者」という肩書きです。そして、そのクラスを元にして作られるインスタンスが1人1人の勇者です。
クラスを理解することは、Javaのオブジェクト指向を学ぶ第一歩です。
クラスには何が書けるの?Javaクラスの基本構成を理解しよう
Javaのクラスの中には、主に次の3つを記述できます。
フィールド(変数):オブジェクトが持つ情報を保存
フィールドとは、クラスが持つデータのことです。たとえば、勇者クラスなら「名前」や「年齢」といった情報がそれにあたります。これらの情報はオブジェクトごとに異なるため、各インスタンスがそれぞれの値を持つことで、個別の存在として扱えるようになります。
//勇者の名前
String name;
//勇者のレベル
int level;
このように、クラスの中に変数を定義することで、オブジェクトが情報を持てるようになります。
コンストラクタ:オブジェクトを作るときの初期設定
コンストラクタは、オブジェクトが生成されるときに最初に呼び出される特別なメソッドです。Javaでは、クラスと同じ名前で定義し、戻り値は書きません。
たとえば、Heroクラスのオブジェクトを作るときに、「アレックス」「レベル3」といった初期情報を設定したい場合は、以下のように書きます。
public Hero(String name, int level) {
this.name = name;
this.level = level;
}
ここで this.name = name;
と書いているのは、クラスの中の変数(フィールド)と、コンストラクタの引数の名前が同じであるためです。this
をつけることで、「これはこのクラスの変数だよ」とJavaに教えることができ、混乱を避けられます。
メソッド:オブジェクトができる動作を定義
メソッドは、クラスに属する処理(動作)を定義する場所です。たとえば、勇者が「攻撃する」という動作は、次のようにメソッドとして表現します。
public void attack() {
System.out.println(name + "が攻撃した!");
}
このようにして、各オブジェクトが自分自身の状態(nameなど)を使って行動することができるようになります。メソッドは、オブジェクトに“何ができるか”を教えるパーツです。
メソッドについてはこちらの記事で解説しています。
クラスを使うメリットとは?初心者が知っておきたいクラス活用の魅力
Javaでクラスを使うと、次のようなメリットがあります:
- 現実世界のモノを自然に表現できる:勇者や魔法、モンスターなど、ゲームや現実の登場人物・モノを直感的にコードで表現できます。
- 情報と処理をひとまとめにできる:名前やレベルといった情報(フィールド)と、行動(メソッド)を1つの箱=クラスにまとめられます。
- 再利用性が高い:一度クラスを作っておけば、何人でも勇者を作れますし、設定もメソッドも共有できます。
プログラムが複雑になっても、クラスごとに役割を分けて管理できるようになるため、大規模な開発にも対応しやすくなります。
クラスを使ってみよう:Javaでのインスタンス化と使用例
実際にJavaでクラスを使う方法を見てみましょう。以下のコードは、Heroクラスを使って「アレックス」という勇者を作り、攻撃させる例です。
public class Main {
public static void main(String[] args) {
Hero myHero = new Hero("アレックス", 3); // レベル3の勇者
myHero.attack();
}
}
このコードのポイントは、new Hero("アレックス", 3)
でHeroクラスからインスタンス(オブジェクト)を生成しているところです。そして myHero.attack();
のように、作ったオブジェクトのメソッドを使って「攻撃する」動作を実行しています。
アクセス修飾子とデータの守り方:privateとpublicの使い分け
Javaのクラスでは、どの変数やメソッドが外から使えるのかをコントロールするために「アクセス修飾子」を使います。
よく使われるのは以下の2つです。
public
:他のクラスからもアクセスできる(公開)private
:そのクラスの中からしかアクセスできない(非公開)
たとえば、クラス内の変数を private
にしておくことで、外部から勝手に値を変更されることを防ぐことができます。
private String name;
public void setName(String newName) {
name = newName;
}
このように private
でデータを守りつつ、public
なメソッドで変更できるようにする考え方は「カプセル化」と呼ばれ、Javaの設計でとても重要です。
publicやprivateなどのアクセス修飾子についてはこちらで解説しています。
応用:オブジェクトによるカプセル化と攻撃力の管理
たとえば勇者のレベルに応じて攻撃力を自動的に計算し、それを使って攻撃するメソッドを実装することもできます。攻撃力の計算ロジックをクラス内部に閉じ込めることで、外部からは「attack() を呼び出すだけ」で攻撃処理ができるようになります。
そして内部の計算処理は攻撃するときには気にする必要がなくなります。
これが「カプセル化」の応用です。
public class Hero {
private String name;
private int level;
public Hero(String name, int level) {
this.name = name;
this.level = level;
}
// レベルに応じた攻撃力を内部で計算
private int calculateAttackPower() {
return level * 10 + level;
}
// 攻撃メソッド
public void attack() {
int power = calculateAttackPower();
System.out.println(name + "が攻撃した! 攻撃力は" + power + "です。");
}
}
このように、calculateAttackPower()
のような内部処理を private
にすることで、外部からはアクセスできないようにして、安全で使いやすい設計にすることができます。
まとめ:Javaのクラスは“モノを表す箱”。使いこなしてプログラミングを楽しく!
この記事では、Javaのクラスについて初心者向けに基本から丁寧に解説しました。
- クラスは「モノの設計図」であり、インスタンスはその具体的な実体であること
- クラスには変数(フィールド)、コンストラクタ、メソッドを書けること
- オブジェクトを生成して、その機能を呼び出す方法(インスタンス化)
this
の使い方やprivate
の重要性とカプセル化の考え方
これらを理解すれば、Javaのオブジェクト指向の入り口にしっかり立つことができます。
最初は難しく感じるかもしれませんが、繰り返し書いて動かしてみることで、少しずつ身につきます。ぜひこの記事を参考に、自分でもクラスを作って、小さなプログラムから挑戦してみてくださいね。