前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

抽象クラスのstaticフィールドの影響範囲について

疑問

staticフィールドはクラスと静的に結びつくが、それが抽象クラスだった
場合にはその値は具象クラスごとに変わるのだろうか、それとも共通なのだろうか。

確認

抽象クラス

public abstract class AbstractGeorgia {
	protected static int count = 0;
	public static void init() {
		count++;
	}
}

継承クラス1

public class GeorgiaBlack extends AbstractGeorgia {

	public int getCount() {
		return count++;
	}

}

継承クラス2

public class GeorgiaMilk extends AbstractGeorgia {

	public int getCount() {
		return count++;
	}
}

確認用クラス

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AbstractGeorgia.init();//count==1になる
		GeorgiaBlack black = new GeorgiaBlack();
		GeorgiaMilk milk = new GeorgiaMilk();

		System.out.println(black.getCount());//1を返す
		System.out.println(milk.getCount());//どうなる?
		System.out.println(black.getCount());//どうなる?
	}

}

結果

1
2
3

結論

staticフィールドはあくまでも宣言されたクラスと静的に結びつき、抽象クラスか
具象クラスかは関係がない。抽象クラスのstaticフィールドの値が変更されると
継承する全ての具象クラスが影響を受ける。
ちなみにInterfalceも同様の結果となった。