預設方法 步驟 1 : 什麼是預設方法 預設方法是JDK8新特性,指的是介面也可以提供具體方法了,而不像以前,只能提供抽象方法 Mortal 這個介面,增加了一個 預設方法 revive,這個方法有實現體,並且被聲明為了 default package charactor; public inter ...
預設方法
步驟 1 : 什麼是預設方法
預設方法是JDK8新特性,指的是介面也可以提供具體方法了,而不像以前,只能提供抽象方法
Mortal 這個介面,增加了一個預設方法 revive,這個方法有實現體,並且被聲明為了default
package charactor;
public interface Mortal {
public void die();
default public void revive() {
System.out.println("本英雄複活了");
}
}
步驟 2 : 為什麼會有預設方法
假設沒有預設方法這種機制,那麼如果要為Mortal增加一個新的方法revive,那麼所有實現了Mortal介面的類,都需要做改動。
但是引入了預設方法後,原來的類,不需要做任何改動,並且還能得到這個預設方法
通過這種手段,就能夠很好的擴展新的類,並且做到不影響原來的類
練習: 預設方法
為AD介面增加一個預設方法 attack()
為AP介面也增加一個預設方法 attack()
問: ADAPHero同時實現了AD,AP介面,那麼 ADAPHero 對象調用attack()的時候,是調用哪個介面的attack()?
答案:
package charactor;
public class ADAPHero extends Hero implements AD,AP,Mortal{
@Override
public void magicAttack() {
// TODO Auto-generated method stub
}
@Override
public void physicAttack() {
// TODO Auto-generated method stub
}
@Override
public void die() {
System.out.println(name+ " 這個混合英雄掛了");
}
//作為同時繼承了AD和AP中的 預設方法attack,就必須在實現類中重寫該方法
//從而免去到底調用哪個介面的attack方法這個問題
@Override
public void attack() {
//
System.out.println("這個ADAPHero自己的attack方法");
}
}