継承
既存クラスを元に新しいクラスを定義する。(元となるクラス=スーパークラス、新しく定義するクラス=サブクラス
この際、スーパークラスのメソッドやフィールドは受け継がれる。
※アクセス修飾子がprivate,修飾子なしのメソッド・フィールドにはアクセス不可
※複数のスーパークラスを継承する(多重継承)は不可(ただしサブクラスをスーパークラスとした継承は可)
※final修飾子のついたクラスは継承不可
class SubClass extends SuperClass {
...
}
サブクラスでは、スーパークラスのメソッドの処理を上書きするオーバーライドが可能
class SubClass extends SupreClass {
@Override methodA() {
super.methodA(); //既存メソッドの処理を実行
...
}
}
オーバーライドするためには以下の条件を満たす必要がある。
・メソッド名、引数が同一であること
・戻り値は元メソッドと同じかサブクラスであること
・アクセス修飾子は元メソッドと同じかより公開範囲が広いこと
・final修飾子のついていないメソッドであること
抽象クラス
処理内容を定義しないメソッドを含むクラス。
※abstract修飾子はアクセス修飾子より後、class・戻り値の型より前に記述すること。
※abstractをつけたメソッドには{}を付けないこと。
abstract class AbsClass {
public abstract void methodA();
}
#インタフェース
実装が必要なメソッドを定義したクラス。
※SE8からはデフォルトの実装とstaticメソッドが定義できるようになった。
public interface InterfaceSampl(){
public abstract void methodA();
default void methodB(){
...
}
}
※インターフェイスは多重継承が可能である。
※private,protectedなメソッドはコンパイルエラーとなる
※コンパイル時に暗黙でpublic abstractに変換される。