継承とは
Javaの継承は、1つのクラスが別のクラスから特性や機能を継承することを意味します。
これにより、新しいクラスは元のクラスのすべての変数とメソッドを継承し、
新しい機能を追加することができます。
継承を実現するには、次のようにします。
親クラスの定義(スーパークラス)
まず、親クラスを定義します。親クラスは、共通の特性や機能を持つクラスです。これは、通常、変数とメソッドで構成されています。たとえば、次のようなPersonクラスを考えてみましょう。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
子クラスの定義(サブクラス)
次に、子クラスを定義します。子クラスは、親クラスから特性や機能を継承する新しいクラスです。子クラスは、次のようにして親クラスを継承します。
public class Student extends Person { private int studentID; public Student(String name, int age, int studentID) { super(name, age); this.studentID = studentID; } public int getStudentID() { return studentID; } }
子クラスの使用
最後に、子クラスを使用します。これは、通常のクラスと同じように行います。
Student student = new Student("John", 20, 12345); System.out.println(student.getName()); // "John" System.out.println(student.getAge()); // 20 System.out.println(student.getStudentID()); // 12345
継承により、
Studentクラスは、
Personクラスからnameとageという2つの変数と、
getName()とgetAge()という2つのメソッドを継承し、
さらにstudentIDという新しい変数と、
getStudentID()という新しいメソッドを追加しています。
継承を使うと、親クラスの変数やメソッドを子クラスで再利用することができるだけでなく、子クラスは親クラスで定義されていない新しい変数やメソッドを追加することもできます。これにより、コードの再利用性が高まり、保守性や拡張性が向上します。
また、継承により、多様性を実現することもできます。具体的には、異なる子クラスを作成することで、同じ親クラスから派生した複数のクラスがあります。これらのクラスは、同じ親クラスの特性や機能を共有しながら、独自の特性や機能を持つことができます。
ただし、継承を過度に使用すると、コードの複雑さが増し、理解しにくくなることがあります。また、親クラスの変更が子クラスに予期せぬ影響を与える可能性があるため、十分に注意して使用する必要があります。
単一継承の制限
Javaでは単一継承の制限があります。
1つのクラスは1つの親クラスからしか継承できないということです。
これは、Javaのクラス階層が複雑になりすぎないようにするための制限です。
ただし、Javaではインターフェースを使って複数のインターフェースを実装することができます。これにより、多重継承に近い機能を実現することができます。
Objectクラス
Javaでは、Objectクラスをすべてのクラスの親クラスとして定義しています。
すべてのクラスはObjectクラスを継承しているため、Objectクラスで定義されているメソッドをすべて使用することができます。
例えば、
- equalsメソッド
- hashCodeメソッド
- toStringメソッド
などがあります。
Javaの継承に関するポイント
継承とは
継承とは、既存のクラスを基にして新しいクラスを作ることです。新しいクラスは、既存のクラス(親クラスまたはスーパークラス)のすべてのフィールドとメソッドを継承します。
extends
継承関係は、extendsキーワードを使って宣言します。
例えば、以下のようになります。
class Subclass extends Superclass { // Subclass に関するコード }
サブクラス
サブクラスは、スーパークラスのすべての非プライベートフィールドとメソッドにアクセスできます。ただし、スーパークラスのプライベートフィールドとメソッドにはアクセスできません。
オーバライド
オーバーライドとは、サブクラスがスーパークラスのメソッドを再定義することです。オーバーライドするメソッドには、@Overrideアノテーションを付けることができます。
super
superキーワードを使って、サブクラスからスーパークラスのコンストラクタやメソッドを呼び出すことができます。これは、サブクラスが独自の動作を追加する場合に便利です。
サブクラスで新しいフィールドやメソッドを追加することができます。また、スーパークラスのフィールドやメソッドを隠すこともできます。この場合、superキーワードを使ってスーパークラスのフィールドやメソッドにアクセスすることができます。
まとめ
継承を使うことで、コードの再利用性や保守性を高めることができます。
ただし、過度に多層化した継承関係はコードを複雑化させることがあるため、注意が必要です。
コメント