Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ OOPの原則 継承 | オブジェクト指向プログラミング
Java OOP

bookOOPの原則 継承

メニューを表示するにはスワイプしてください

継承

OOPの原則の一つである継承について説明。

継承は、あるクラスを基に新しいクラスを作成する仕組み。

  • 基となるクラスは親クラスまたはスーパークラスと呼ばれる;
  • 親クラスを基に作成されたクラスは子クラスサブクラス、または派生クラスと呼ばれる。

このように、子クラスは他のクラス(親クラス)の特徴やプロパティメソッド変数)を継承できる。

クラスの継承には extends キーワードを使用。親クラスから子クラスが継承する構文は次の通り:

Child.java

Child.java

copy
123
class Child extends Parent { // properties and methods }

継承がコードでどのように機能するか、例を見てみる。クラス Bird には特定のフィールドメソッドがあり、クラス Parrot には独自のフィールドメソッドがある。オウムは鳥であるため、論理的にオウムは Bird クラスを継承するべきである:

こちらは、スクリーンショットのコードを、より読みやすく明確に書き直したものです。

Bird.java

Bird.java

Parrot.java

Parrot.java

Main.java

Main.java

copy
12345678910111213141516171819
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }

これらの図で何が起こっているのかを理解しましょう。

  1. クラス Bird を作成します。これは親クラスです。このクラスには独自のフィールドメソッドがあります。
  2. クラス Parrot を作成します。このクラスは extends キーワードを使って親クラス Bird から継承します。Parrot クラスは子クラスであり、独自のフィールドとメソッドを持ちます。さらに、子クラスとして Parrot は親クラス Birdすべてのフィールドとメソッドを継承します。
  3. Parrot メソッド内で main クラスのオブジェクトを作成し、クラスとクラスの両方のフィールドを初期化できることを確認します。まず親クラス Bird のフィールドを初期化し、次に子クラス Parrot のフィールドを初期化します。次に、メソッドを呼び出します。最初に親クラスのメソッド、次に子クラスのメソッドを呼び出します。

このようにして、継承を利用して Bird クラスを継承しました。

なぜこれを行うのか?

多くの異なる Bird のサブクラス(例えば Parrot だけでなく、PigeonPenguin など)がある場合、boolean canFly のような重複したフィールドが多数発生します。継承の第一の利点は、重複したコードの断片を避けることです。 さらに、可読性が大幅に向上します。実際には、Bird クラスやそのサブクラスを直接扱うことはあまりありませんが、継承は特にインターフェースと組み合わせてよく使われます。

Note

インターフェースについては、このコースの次のセクションで学習します。

継承のルール

  • 1つのクラスのみを継承可能。 Javaは多重継承をサポートしていません。1つのクラスは1つの親クラスしか持てません。

  • private 変数とメソッド以外はすべて継承されます。

Note

自分自身から継承することはできません!

前述の通り、サブクラスは親クラスのすべての変数とメソッドにアクセスできると述べましたが、これは完全には正しくありません

実際には、private 修飾子が付いたすべてのメソッドと変数はサブクラスからアクセスできません。

  • 親クラスのメソッドのオーバーライド。

クラスを継承した際、継承したコードの一部を変更したい場合があります。特定のメソッドを親クラスとは異なる動作にしたい場合です。

親クラスのメソッドをオーバーライドするには、その上に @Override を記述します。

Parrot.java

Parrot.java

copy
1234
@Override public void eat() { System.out.println("The parrot is eating"); }

上記のコードでは、クラスのメソッドを__オーバーライド__しています。そのため、このメソッドがクラスから呼び出されると、オーバーライドされたメソッドが実行されます。

  • 継承の防止

クラスを他のクラスに継承させたくない場合は、final修飾子をクラスの前に付けます。 例えば:

Bird.java

Bird.java

Parrot.java

Parrot.java

copy
123
public final class Bird { // fields and methods }

このように、キーワード final を使用することで、Bird クラスの継承を禁止しています。

これらは継承の基本的なルールおよび特徴です。継承は非常に広範なトピックであり、頻繁に利用されます。本コースを通じて、継承の他の側面にも慣れ、より多く活用できるようになります。

1. なぜJavaで継承が必要なのですか?

2. 一度に継承できるクラスはいくつですか?

3. Javaで継承を防ぐにはどうすればよいですか?

question mark

なぜJavaで継承が必要なのですか?

正しい答えを選んでください

question mark

一度に継承できるクラスはいくつですか?

正しい答えを選んでください

question mark

Javaで継承を防ぐにはどうすればよいですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  2
some-alt