インタフェース
インタフェースは、メソドの規約のみを定義し、実装は行わない。
インタフェースは、複数の実装が存在する一連の共通の動作が存在する場合に使用する。
インタフェースの定義
public interface InterfaceName {
returnType methoName(argumentList);
}
public class Maneger extends Employee inplemets BonusEligible, StockOptionRecipient {
// And so on
}
public interface BonusEligible {
}
public interface StockOptionRecipient {
void processStockOptions(int numberOfOptions, BigDecimal price;
}
インタフェースの実装
public class ClassName Extends SuperclassName implements InterfaceName {
// Class Body
}
public class Manager extends Employee implements StockOptionRecipient {
public Manager() {
}
public void processStockOtions(int numberOfOptions, BigDecimal price) {
log.info(I can't believe I got " + number + " options at $" + price.toPlainString() + "!");
}
}
Eclipseでインタフェースの生成
対象クラスを選択し、Ctrl + 1を押下
「Add Unimplemented Methods(実装されていないメソドを追加)」を選択
インタフェースの参照
package com.makotojava.intro;
interface StockOptionEligible {
void awardStockOptions(int numberOfOptions, BigDecimal reallyCheaperPrice);
}
package com.makotojava.intro;
import java.math.BigDecimal;
import org.junit.Test;
public Class ManagerTest {
@Test
public void testCalculateAndAwardStockOptions() {
StockOptionEligible soe = new Manager(); // valid
caluculateAndAwardStockOptions(soe);
caluculateAndAwardStockOptions(new Manager()); // works too
}
public static void caluculateAndAwardOptions(StockOptionsEligible soe) {
BigDecimal reallyCheapPrice = BigDecimal.valueOf(0.01);
int numberOfOptions = 1000;
soe.awardStockOptions(numberOfOptins, reallyCheapPrice);
}
}
public class Manager implements StockOptionEligible {
public void awardOptions(numberOfOptions, reallyCheapPrice) {
System.out.println ("numberOfOptions:"+ numberOfOptions + " reallyCheapPrice:" + reallyCheapOptions.toPlaineString());
}
//...
}
代入:インターフェース
Manager m = new Manager();
StockOptionEligible soe = m; //Ok
Employee e = soe; // wrong