#インターフェースとしてできる条件
抽象クラスの親玉(一番上の方)
①すべてのメソッドは抽象メソッド
②基本的にフィールドを持たない
###抽象度の高いHumanクラス
Human.java
public abstract class Human { //上の①②を満たしている
public abstract void run();
}
###インターフェースとして宣言したHumanクラス
Human.java
public interface Human {
void run(); //public abstract を省略可能
}
###インターフェースの実装
Hero.java
public class Hero implements Human {
}
###インターフェースによる多重継承
Hero.java
public class PrincessHero
implements Hero, Princess { //親のインターフェースを複数継承できる
}
クラスでは多重継承はできないが、インターフェースなら可能
###インターフェースの継承
Hero.java
public interface Human extend Creature {
void talk();
void watch();
void hear();
//さらに、親インターフェースからrun()を継承している
}
###implements(実装)、extend(継承)の使い分け
- クラス同士、インターフェース同士なら
extend(継承)
- クラスでインターフェースを使う(異種)なら
implements(実装)
###implements(実装)、extend(継承)の両方を使ったクラスの定義
Hero.java
public class Hero extends Charaater implements Human{
// Charaaterからhpやnameなどのフィールドを継承
// Charaaterから継承した抽象メソッドattack()実装
public void attack(Goblin g) {
System.out.println(this.name + "5のダメージをあたえた");
}
// さらにHumanから継承した4つの抽象メソッドを実装
public void talk(){
System.out.println("・・・");
}
public void watch(){
System.out.println("・・・");
}
public void hear(){
System.out.println("・・・");
}
public void run(){
System.out.println("・・・");
}
}