【Java】Final修飾子

[1] クラス

 * クラスの継承できないようにする

サンプル

final class SampleClass {
}

public class SubSampleClass extends SampleClass {
  // コンパイルエラー
}

[2] メソッド

 * クラスのオーバーライドができないようにする

サンプル

public class SampleClass {
	public final void setXxx() {
	}
}

public class SubSampleClass extends SampleClass {
	public void setXxx() {
		// コンパイルエラー
	}
	public void setXxx(int xxx) {
		// OK
	}
}

[3] 変数

基本型変数

 * 変数の変更できないようにする
 * 「final static」で定数になる(★重要★)

参照変数

 * 変数をnewして再変更ができないようにする

サンプル

例1:定数
public class SampleClass {
	// 定数(★重要★)
	public final static int MaxNumber = 100;
}
例2:コンパイルエラー
public class SampleClass {

	final public String str1 = "test"; // final
	final public String str2; // !!NG!!
	public String str4 = "test";

	public void sample1() {

		final String str3 = "test"; // final

		str1 = "TEST"; // !!NG!!
		str3 = "TEST"; // !!NG!!
	}

	public void sample2() {
		final SampleClass sample = new SampleClass();

		sample = null; // !!NG!!
		sample = new SampleClass(); // !!NG!!

		sample.str4 = "sample"; // OK
		sample.setStr4(sample.getStr4()); // OK
	}
	public void setStr4(String str4) {
		this.str4 = str4;
	}
	public String getStr4() {
		return this.str4;
	}	
	public void copy(final String src, String dst) {
		src = dst; // !!NG!!
		src = "ABC"; // !!NG!!
	}
}