高度な継承

高度な継承とは

他者のプログラマのために作るという異なる視点が必要になる

 

実現するための弊害

継承先でどんな操作になるのか具体的なことがわからない

newによるインスタンス生成ができてしまうと異常事態

 

弊害の解消

どんな操作になるのか具体的にわからない

→オーバーライドすれば解決できる

newにようインスタンス生成ができてしまうと異常事態

→privateアクセス修飾子をつけるしかない

 

心配事の解消①

詳細未定のメソッドは抽象メソッドという

書き方

アクセス修飾子 abstract 戻り値 メソッド名(引数リスト);

(ex)

public abstract void waru();

abstractはオーバーライドを強制する!

 

心配事の解消②

インスタンス生成ができないクラス

抽象クラス

書き方

アクセス修飾子 abstract class クラス名 {  }

(ex)

public abstract class Kanagata{  }

抽象メソッドを持ったクラスは必ず抽象クラスにする

 

より抽象的なもの

抽象メソッドしか持っていないものをインターフェースというクラスで記載できる

特徴

1 抽象メソッドしか定義できない

2 フィールドは定数のみ記述が許されている

書き方(ex)

public interface Animal{

    public abstract void eat();

}

public abstractを省略してvoid eat();とすることも可能

 

インターフェイスの実装

interfaceはimplementsというキーワードを使い実装してオーバーライドを行う

書き方

アクセス修飾子 class クラス名 implements インターフェイス

(ex)

public class Human implements Animal{  }

実装は親を複数作ることができる(多重実装)

書き方

アクセス修飾子 class クラス名 implements インターフェイス名,

インターフェイス名2{  }

(ex)

public class Human implements Animal,Animal2{  }