インターフェイスは、そのクラスのオブジェクトを
参照することができる型(type)の役割をします。
インターフェイスを実装するとint、stringなどの型を
そのままオーバーライドすることになります。
普通は、この目的のためにオントフェイスを使用します。
しかし、その中にはそうでないインターフェースもあります。
public Interface PhysicalConstants {
static final double AVOGADROS_NUMBER = 6.02214199e23;
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
static final double ELECTRON_MASS = 9.10938188e-31;
}
これは定数のインターフェースパターンです。
利便のために使用することがあります。
このようなインタフェースの使用は、
public class Main {
public static void main(String[] args) {
System.out.println(PhysicalConstants.AVOGADROS_NUMBER);
}
}
このように使う必要があるコードを
public class Main implements PhysicalConstants {
public static void main(String[] args) {
System.out.println(AVOGADROS_NUMBER);
}
}
このように使うことができるようにしてくれます。
しかし、この方法はクラスの中身が公開されます。
カプセル化の原則を毀損しています。
それに加えて、インターフェイスは型の実装という一つの約束です。
このことを知らない一般のユーザーはこの実装を型の実装として
把握する可能性が高いです。このような混乱は避けた方がいいです。
泣きっ面に蜂で、Mainクラスを継承するすべてのサブクラスが
実装形態に影響を受けることになります。
みんなで仲良く「汚染!」されるはめになります。
このためこいう使い方は遠因する必要があります。
定数の定義を使いたい場合は
Java 1.5から、より良い方法があります。
public class PhysicalConstants {
private PhysicalConstants() {}
static final double AVOGADROS_NUMBER = 6.02214199e23;
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
static final double ELECTRON_MASS = 9.10938188e-31;
}
このような定数クラスを定義した後
使用するクラスにこのように、静的インポートをしましょう。
import static com.effectivejava.science.PhysicalConstants;
このような使い方はインターフェイスを使わないけれど
簡単な定数の使用ができます。
この規則をまとめると
「インターフェイスを型の実装以外の目的で使うことは遠因してください。」
になります。
댓글 없음:
댓글 쓰기