【Java入門】継承・オーバーライド・ポリモーフィズムを初心者向けに解説

スポンサーリンク

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つをしっかり理解して使いこなせるようになると、プログラムはより柔軟に、整理された形で書けるようになります。

最初は少し難しく感じるかもしれませんが、例をまねしながら自分で手を動かしていくうちに、自然と身についていきます。
焦らず、自分のペースで学んでいきましょう。応援しています。

タイトルとURLをコピーしました