Javaの「クラス」に慣れてきたら、次に覚えたいこと
Javaでクラスやオブジェクトを少し使いこなせるようになってきたら、
次に学ぶべきステップは「クラスをもっと上手に活かす方法」です。
そのカギになるのが以下の3つの考え方です。
- 継承(けいしょう)
- オーバーライド
- ポリモーフィズム
これらは、Javaの「オブジェクト指向」を支える基本的な仕組みで、
コードを再利用しやすくしたり、柔軟にカスタマイズできるようにするために欠かせません。
今回はJavaのクラスをを活用して継承、オーバーライド、ポリモーフィズムについて解説していきます。
この記事で学べること
この記事ではJava初心者に向けて以下のことを解説していきます。
- Javaの継承とは何か、基本的な使い方がわかる
- オーバーライドで動作を変える方法と注意点を理解できる
- ポリモーフィズムの考え方と使いどころを知ることができる
- サンプルコードを通じて3つの考え方のつながりを体験できる
- 初心者がつまずきやすいポイントを事前に押さえられる
まずは言葉の意味をやさしく整理しよう
継承(けいしょう)ってなに?
継承とは、「親から子へ能力を受け継ぐ」ような仕組みです。
たとえば、料理上手なお母さんの子どもも料理が得意になるようなイメージです。
Javaでは、親クラスが持っているメソッドや変数を、子クラスがそのまま使えるようになります。
これにより、同じようなコードを繰り返し書かなくて済み、スッキリした設計ができます。
オーバーライドってなに?
オーバーライドは、「親から受け継いだ機能を、自分らしく書きかえる」ことです。
たとえば、親が「こんにちは」とあいさつするけれど、自分は「やあ!」と言いたい。
そんなとき、Javaでは親と同じ名前・引数・戻り値のメソッドを子クラスで上書きすることで、動作を変えることができます。
ポリモーフィズムってなに?
ポリモーフィズムは、「同じ型なのに、中身の動きが違う」仕組みです。
たとえば、家族写真ではみんな「人間」として写っていても、実際にはお父さん・お母さん・子どもと、それぞれ違いますよね。
Javaでも、Animal 型の変数に Dog や Cat を入れておいても、それぞれの speak()
がきちんと呼び出されます。
初心者向けJava用語ミニ辞典
用語 | やさしい説明 |
---|---|
クラス(class) | プログラムの設計図。機能やデータをまとめた箱。 |
継承(inheritance) | 親クラスの機能を子クラスが引き継ぐこと。 |
オーバーライド(override) | 親の機能を、子が自分のやり方で書き直すこと。 |
ポリモーフィズム(polymorphism) | 共通の型で、いろんなクラスをまとめて扱うしくみ。 |
abstract | 中身のないメソッド。「子で中身を必ず書いてね」という指示。 |
extends | 「このクラスは親クラスを引き継いでいます」という宣言。 |
@Override | 「これは親のメソッドを上書きしているよ」と教える記号。 |
なんでこれを学ぶ必要があるの?
この3つの考え方を学ぶと、Javaのコードがぐっと書きやすくなります。
たとえば…
- 共通の機能をまとめて、何度も同じコードを書く必要がなくなる
→ 継承 - クラスごとに、振る舞いを自由に変えられる
→ オーバーライド - 種類の違うクラスを、ひとまとめに扱えるようになる
→ ポリモーフィズム
このように、コードが短く・きれいになり、変更にも強くなります。
Javaの開発現場でも頻繁に使われる基本テクニックなので、今のうちに身につけておくと、この先がとてもラクになります。
継承・オーバーライド・ポリモーフィズムの書き方を順番に確認しよう
1. 継承の書き方と使い方
class Animal {
void speak() {
System.out.println("動物が鳴いています");
}
}
class Dog extends Animal {
void run() {
System.out.println("犬が走っています");
}
}
Dog は Animal を継承しているので、Animal の speak()
をそのまま使うことができます。
このように「共通する機能」は親クラスにまとめておくと、コードを効率よく書けるようになります。
2. オーバーライドの書き方と注意点
class Dog extends Animal {
void speak() {
System.out.println("ワン!");
}
}
親とまったく同じメソッドを子クラスで書き直すと、オーバーライドになります。
オーバーライドを正しく行うための3つの条件
- メソッド名が同じ
- 引数の数と型が同じ
- 戻り値の型が同じ
このどれかが違うと、Javaは別のメソッドと判断し、オーバーライドになりません。
@Override の役割とメリット
@Override
void speak() {
System.out.println("ワン!");
}
@Override
を付けることで、「これはオーバーライドのつもりですよ」とJavaに伝えることができます。
もし書き間違いがあれば、コンパイルエラーで教えてくれるので、初心者ほど付けておくと安心です。
3. ポリモーフィズムの使い方
class Cat extends Animal {
@Override
void speak() {
System.out.println("ニャー!");
}
}
public class Zoo {
public static void main(String[] args) {
Animal[] animals = { new Dog(), new Cat() };
for (Animal animal : animals) {
animal.speak();
}
}
}
Animal 型で Dog や Cat をまとめて扱っていますが、実際にはそれぞれの speak()
メソッドが正しく呼ばれています。
これがポリモーフィズムの力です。
まとめ
今回紹介した「継承」「オーバーライド」「ポリモーフィズム」は、Javaの基本であり、実際の開発現場でもよく使われる重要な考え方です。
継承を使えば、共通の機能を親クラスにまとめて、重複したコードを省けます。
オーバーライドを使うと、子クラスごとに動作を自由にカスタマイズできます。
ポリモーフィズムを使えば、異なるクラスを共通の型で扱いながら、それぞれに合った動作をさせることができます。
この3つをしっかり理解して使いこなせるようになると、プログラムはより柔軟に、整理された形で書けるようになります。
最初は少し難しく感じるかもしれませんが、例をまねしながら自分で手を動かしていくうちに、自然と身についていきます。
焦らず、自分のペースで学んでいきましょう。応援しています。