インターフェース (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
100

インターフェースのフィールドは、3行目のようにインターフェース名を指定して参照することもできますし、4行目のようにインターフェース名を省略して参照することもできます。


[インターフェース 関連記事]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です