高度な継承
高度な継承とは
他者のプログラマのために作るという異なる視点が必要になる
実現するための弊害
継承先でどんな操作になるのか具体的なことがわからない
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{ }