インターフェースクラスはわかりにくい。
<使う理由>
クラスがクラスを使うときに、双方ができるだけ修正したりしないようにする。
ある処理がテーブルにデータを入れ、別の処理がそれを取得する場合、テーブルの定義
さえ決めていればそれぞれ独立して作れる、というイメージ。
テーブル定義がインターフェースクラス、実際のレコードがそれをインプリメントimplementsしたクラス。レコードを取りたい処理はテーブル定義に対して処理を書けばよい。
<サンプル>
★インターフェースクラス
public interface tesuryo{
/* 手数料を返すメソッドの宣言のみ*/
public int getTesuryo();
}
★実装クラス
public class tesuryoImpl implements tesuryo{
/*implementsしたインターフェースと同じメソッドを作らないといけない*/
public int getTesuryo(){
/*\50を返す*/
return 50;
}
}
★使うほうのクラス
public class testjikko{
public static void main(String args){
...省略
/*インターフェースクラスで、実装クラスのオブジェクトを受けれる*/
tesuryo ts = new tesuryoImple();
/* ここでは\50返ってくる*/
ts.getTesuryo();
}
}
\100返すクラスも作るとき、
また例のインターフェースをインプリメントして作る。
★実装クラス
public class tesuryoImpl100 implements tesuryo{
public int getTesuryo(){
/*\50を返す*/
return 100;
}
}
★使うほう
public class testjikko{
public static void main(String args){
...省略
/*インターフェースクラスで、実装クラスのオブジェクトを受けれる*/
tesuryo ts = new tesuryoImple();
/* ここでは\50返ってくる*/
ts.getTesuryo();
/*別のimplementsしたクラスを突っ込むと、、*/
tesuryo ts = new tesuryoImple100();
/* ここでは\100返ってくる*/
ts.getTesuryo();
}
}
newするときはそれぞれのクラスを入れなければいけないが、
メソッドの呼出し部分は同じでよい。
これを応用すれば、メソッドを呼ぶ部分は共通でまとめることが
できる。