// 親クラス: Vehicle
class Vehicle {
// エンジンを起動するメソッド
void start() {
System.out.println("エンジンを起動します。");
}
// エンジンを停止するメソッド
void stop() {
System.out.println("エンジンを停止します。");
}
}
// 子クラス1: Car
class Car extends Vehicle {
// アクセルを踏むメソッド
void accelerate() {
System.out.println("アクセルを踏みます。");
}
}
// 子クラス2: Bicycle
class Bicycle extends Vehicle {
// ベルを鳴らすメソッド
void ringBell() {
System.out.println("ベルを鳴らします。");
}
}
// 動作確認クラス: VehicleTest
public class VehicleTest {
public static void main(String[] args) {
// Carクラスのオブジェクトを作成
Car myCar = new Car();
// Carクラスのメソッドを呼び出し
myCar.start();
myCar.accelerate();
myCar.stop();
// Bicycleクラスのオブジェクトを作成
Bicycle myBicycle = new Bicycle();
// Bicycleクラスのメソッドを呼び出し
myBicycle.start();
myBicycle.ringBell();
myBicycle.stop();
}
}
この例では、親クラス Vehicle
に start
と stop
メソッドを追加し、子クラス Car
と Bicycle
がそれを継承しています。また、Car
クラスには追加メソッドとして accelerate
を、Bicycle
クラスには ringBell
を追加しています。動作確認クラス VehicleTest
でそれぞれのクラスのオブジェクトを作成し、メソッドを呼び出すことで動作を確認できます。
継承の基本
継承(Inheritance)は、オブジェクト指向プログラミングの重要な概念の一つです。これは、既存のクラス(親クラスまたはスーパークラスと呼ばれることがあります)から新しいクラス(子クラスまたはサブクラスと呼ばれることがあります)を作成するプロセスです。継承を使用すると、既存のクラスの機能を再利用し、新しいクラスに独自の機能を追加できます。
以下は、「継承の基本」に関する解説です。
親クラスと子クラス
親クラス(スーパークラス)の作成:
親となるクラスを作成します。このクラスは、一般的な機能や特性を持っています。
// 親クラス
class Vehicle {
void start() {
System.out.println("エンジンを起動します。");
}
void stop() {
System.out.println("エンジンを停止します。");
}
}
子クラスの作成と継承:
子クラスは、extends キーワードを使用して親クラスを継承します。これにより、子クラスは親クラスのすべてのメソッドとフィールドを受け継ぎます。
// 子クラス1
class Car extends Vehicle {
void accelerate() {
System.out.println("アクセルを踏みます。");
}
}
// 子クラス2
class Bicycle extends Vehicle {
void ringBell() {
System.out.println("ベルを鳴らします。");
}
}
メソッドの追加
新しいメソッドの追加:
子クラスでは、親クラスには存在しない独自のメソッドを追加できます。これにより、子クラスに独自の振る舞いを付加できます。
インスタンスの作成と利用
public class VehicleTest {
public static void main(String[] args) {
// 親クラスのインスタンス
Vehicle vehicle = new Vehicle();
vehicle.start();
vehicle.stop();
// 子クラス1のインスタンス
Car car = new Car();
car.start();
car.accelerate();
car.stop();
// 子クラス2のインスタンス
Bicycle bicycle = new Bicycle();
bicycle.start();
bicycle.ringBell();
bicycle.stop();
}
}
この例では、親クラス Vehicle に start と stop メソッドがあり、子クラス Car と Bicycle がそれを継承し、独自のメソッドを追加しています。
継承の利点
- コードの再利用:
- 親クラスで定義された機能や振る舞いを、子クラスが再利用できます。これにより、冗長なコードを減少させ、保守性を向上させます。
- 拡張性:
- 子クラスは親クラスの機能を拡張できます。新しいメソッドやフィールドを追加することで、より複雑な機能を持つクラスを作成できます。
使い方のポイント
- is-a 関係:
- 継承は、is-a 関係が成り立つときに使用します。つまり、子クラスは親クラスの一種であるという関係が成り立つ場合です。
- 親クラスのコンストラクタ:
- 子クラスは親クラスのコンストラクタを呼び出す必要があります。これは、親クラスの初期化が行われるためです。
例
// 親クラス
class Vehicle {
void start() {
System.out.println("エンジンを起動します。");
}
void stop() {
System.out.println("エンジンを停止します。");
}
}
// 子クラス1
class Car extends Vehicle {
void accelerate() {
System.out.println("アクセルを踏みます。");
}
}
// 子クラス2
class Bicycle extends Vehicle {
void ringBell() {
System.out.println("ベルを鳴らします。");
}
}
public class VehicleTest {
public static void main(String[] args) {
// 親クラスのインスタンス
Vehicle vehicle = new Vehicle();
vehicle.start();
vehicle.stop();
// 子クラス1のインスタンス
Car car = new Car();
car.start();
car.accelerate();
car.stop();
// 子クラス2のインスタンス
Bicycle bicycle = new Bicycle();
bicycle.start();
bicycle.ringBell();
bicycle.stop();
}
}
「継承の基本」は、オブジェクト指向プログラミングにおいて強力なツールであり、柔軟で効率的なコードの構築をサポートします。適切に使用することで、コードの再利用性と保守性を向上させることができます。