はじめに
オラクル認定資格教科書 Javaプログラマ Silver SE8
第一章 Javaの基本
第二章 Javaのデータ型の操作
第三章 演算子と判定構造の使用
第四章 配列の作成と使用
第五章 ループ構造の使用
第六章 メソッドとカプセル化の操作
第七章 継承の操作← イマココ!!
第八章 例外の処理
第九章 Java APIの主要なクラスの操作
クラスの継承
継承は、あるクラスを機能拡張した新しいクラスを定義することです。
拡張元になるクラスのことを基底クラスやスーパークラス、拡張したクラスのことを派生クラスやサブクラスという。
class サブクラス名 extends スーパークラス名 {}
注意点
1つのサブクラスが継承できるのは1つのスーパークラスのみ。(多重継承不可)
final修飾子が付いたスーパークラスの継承はできない。
以下の2点については、クラスを継承しても、引き継げない。
・スーパークラス内のコンストラクタ
・スーパークラス内のprivate修飾子の付いた変数やメソッド
親クラスのメソッドの呼び出し
子クラスのインスタンスで、親と子で同名のメソッドを呼び出した場合、子クラスにあるオーバーライドされたメソッドが優先して呼ばれる。
親クラスの同名メソッドを呼び出す場合は、super.メソッド名()
のようにsuperを使用する。
継承とコンストラクタ
親クラスを継承している子クラスのインスタンスを生成した場合、親クラスのコンストラクタから呼び出さなければならない。
引数のないコンストラクタであれば、自動でsuper();
が追加され、呼び出されるが、引数がある場合は、明示しなければならない。
// 親クラス
public class Parent {
public Parent {
System.out.println("親クラスのコンストラクタです");
}
}
// 子クラス
public class Child {
public Child {
System.out.println("子クラスのコンストラクタです");
}
}
// メインクラス
public class Main {
public static void main (String[] args) {
Child c = new Child();
}
}
// 結果 : 親クラスのコンストラクタです 子クラスのコンストラクタです
抽象クラス
抽象クラスは抽象メソッドを持つクラスのこと。(具象クラスも一緒に持てる)
抽象メソッドがある場合、必ず抽象クラスにする必要があり、abstractを使用して宣言する。
public abstract class クラス名 {
}
抽象クラスはインスタンス化できない
抽象クラスを継承した場合、抽象クラスに含まれる抽象メソッドを必ず実装(オーバーライド)しなければならない。
抽象メソッド
現時点で内容が確定できない(処理を持たない)メソッドとして、宣言するのが抽象メソッドである。
抽象メソッドはabstractを使用して宣言する。
public abstract 戻り値 メソッド名(引数);
// 中カッコ「{}」を付けない
抽象メソッドを継承先で実装する場合、シグネチャ(引数とそのデータ型の組)は抽象クラスで宣言されたものに合致している必要あり、戻り値型は同じかそのサブクラスである必要がある。。
抽象クラスに抽象クラスを継承
抽象クラスを具象クラスで継承した場合、すべての抽象メソッドを実装(オーバーライド)しなければならないが、継承先も抽象クラスとした場合、そのルールは適応されない。
継承先も抽象クラスとする場合は、親抽象クラスの抽象メソッドを実装したり、新しく抽象メソッドを追加することが可能(機能の拡張)となる。