// 既存の抽象クラス Person
abstract class Person {
// 既存のフィールドやメソッドがあると仮定
private String name;
// 抽象メソッド displayInfo() を追加
public abstract void displayInfo();
}
// 具象クラス Student
class Student extends Person {
// Student クラスの固有のフィールド
private int studentId;
// コンストラクタ
public Student(String name, int studentId) {
this.name = name;
this.studentId = studentId;
}
// displayInfo() メソッドの実装
@Override
public void displayInfo() {
System.out.println("Student ID: " + studentId);
System.out.println("Name: " + name);
// 他にも必要な情報を表示する処理を追加
}
}
// メインクラス
public class Main {
public static void main(String[] args) {
// Student クラスのインスタンスを作成
Student student1 = new Student("John Doe", 123456);
// displayInfo() メソッドを呼び出して学生の情報を表示
student1.displayInfo();
}
}
この例では、Person
クラスに displayInfo()
抽象メソッドを追加し、Student
クラスでこれをオーバーライドして学生の情報を表示する実装を提供しています。Main
クラスで Student
クラスのインスタンスを作成し、displayInfo()
メソッドを呼び出すことで、学生の情報が表示されます。
出力結果:
Student ID: 123456
Name: John Doe
具象クラス Student
のインスタンスを作成し、displayInfo()
メソッドを呼び出した結果、学生のIDと名前が表示されます。
このコードでは、Person
抽象クラスに displayInfo()
抽象メソッドが追加されており、Student
クラスがこのメソッドをオーバーライドして学生の情報を表示しています。Main
クラスで Student
クラスのインスタンスを作成し、displayInfo()
メソッドを呼び出すことで、学生の情報がコンソールに出力されます。
抽象クラスの拡張
抽象クラスの拡張(拡張とは、別の言葉で継承とも呼ばれます)は、既存の抽象クラスを基にして新しい抽象クラスを作成するプロセスです。以下に、抽象クラスの拡張に関する解説をします。
抽象クラスの基本:
抽象クラスは、少なくとも1つ以上の抽象メソッド(未実装のメソッド)を持つことができます。また、具象メソッド(実装が提供されているメソッド)も持つことができます。
abstract class Animal {
// 抽象メソッド
public abstract void makeSound();
// 具象メソッド
public void sleep() {
System.out.println("Zzz");
}
}
抽象クラスの拡張:
既存の抽象クラスを基にして新しい抽象クラスを作成する場合、extends キーワードを使用します。新しい抽象クラスは、親クラスの抽象メソッドを実装するか、自身も抽象メソッドを追加できます。
abstract class Bird extends Animal {
// Bird クラスが Animal クラスの抽象メソッドを実装
@Override
public void makeSound() {
System.out.println("Tweet tweet");
}
// Bird クラス独自の抽象メソッド
public abstract void fly();
}
具象クラスの作成:
新しい抽象クラスを拡張した後、そのクラスを具象クラスとして実装することができます。具象クラスは、すべての抽象メソッドを実装するか、抽象クラスを更に拡張して追加の抽象メソッドを定義することが求められます。
class Sparrow extends Bird {
// Bird クラスから継承した抽象メソッド fly() の実装
@Override
public void fly() {
System.out.println("Sparrow is flying");
}
}
利用と拡張の継続:
このようにして作成されたクラス階層では、具象クラスを作成し、それをさらに拡張することができます。これにより、共通の機能を提供する抽象クラスから派生した、具体的で特殊なクラスを作成できます。
class Pigeon extends Bird {
@Override
public void fly() {
System.out.println("Pigeon is flying");
}
}
抽象クラスの拡張は、クラス階層を構築し、ポリモーフィズムを実現するための重要な手段の一つです。派生クラスで共通の機能を提供する抽象クラスを拡張し、新しい機能を追加することで、柔軟性と再利用性が向上します。