インターフェース (2) 定数
前回はインターフェースの概要と基本的な使い方をみました。今回はインターフェースのフィールドについてみていきます。
定数とは
※「Wikipedia」から引用します。
プログラミングにおいて定数とは、変数同様プログラムのソースコードにおいて、扱われるデータを一定期間記憶し必要なときに利用できるようにするために、データに固有の名前を与えたものである。 ただし変数とは異なり、一度初期化するとその内容を変更することはできない。
変数と似ていますが、代入されている値が変化するか固定かの違いです。
クラスと定数
【Constant.java】
public class Constant {
final int CONSTANT = 100;
}
まずはクラスでの定数です。クラスのフィールドを定数にしたい場合は、定数名の前に「final」キーワードをつけます。
final 型 定数名
定数にすると代入した値を変更できなくなります。javaでは大文字にするのが慣例です。
【Sample.java】
public class Sample {
public static void main(String[] args) {
Constant obj = new Constant();
obj.CONSTANT = 200;
}
}
Exception in thread "main" java.lang.Error:
Unresolved compilation problem:
final フィールド Constant.CONSTANT には代入できません
4行目で定数の値を変更しようとしました。定数は値を変更できないのでエラーになります。
インターフェースと定数
【InterfaceConst.java】
interface InterfaceConst {
int CONSTANT = 100;
}
インターフェースでフィールドを宣言しました。「CONSTANT」の宣言には「final」がありません。クラスでは「final」がなければ定数ではなく変数となり、値を自由に変更することができました。インターフェースではどのようになるかみてみます。
【Sample.java】
public class Sample implements InterfaceConst{
public static void main(String[] args) {
InterfaceConst.CONSTANT = 200;
}
}
Exception in thread "main" java.lang.Error:
Unresolved compilation problem:
final フィールド InterfaceConst.CONSTANT には代入できません
「final」キーワードをつけていないのに、エラーメッセージをみてみると「CONSTANT」はfinalフィールドであると言っています。つまりCONSTANTは定数扱いされているので値を変更できないためエラーになります。なぜこのようになるかというと、
インターフェースのフィールドは 「public static final」 に自動的になる
からです。よって「final」を指定しなくても「final」に自動的になっているため値を変更しようとするとエラーになります。
インターフェースフィールドの参照
【InterfaceConst.java】
interface InterfaceConst {
int CONSTANT = 100;
}
【Sample.java】
public class Sample implements InterfaceConst{
public static void main(String[] args) {
System.out.println(InterfaceConst.CONSTANT);
System.out.println(CONSTANT);
}
}
100
インターフェースのフィールドは、3行目のようにインターフェース名を指定して参照することもできますし、4行目のようにインターフェース名を省略して参照することもできます。
2010 年 7 月 4 日 日曜日 【 カテゴリー: Javaの基本 】
