1つ、final
クラスとメソッド
英語の文書
原文:Java官方文档-> Finalクラスとメソッドの記述
クラスのメソッドの一部またはすべてをfinalとして宣言できます。final
メソッド宣言でキーワードを使用して、メソッドをサブクラスでオーバーライドできないことを示します。Object
クラスは、この-そのメソッドの数があるんfinal
。
変更してはならない実装があり、オブジェクトの一貫した状態にとって重要である場合は、メソッドをfinalにすることをお勧めします。たとえばgetFirstPlayer
、このChessAlgorithm
クラスのメソッドをfinalにすることができます。
class ChessAlgorithm {
enum ChessPlayer {
WHITE, BLACK }
...
final ChessPlayer getFirstPlayer() {
return ChessPlayer.WHITE;
}
...
}
コンストラクターから呼び出されるメソッドは、通常、finalとして宣言する必要があります。コンストラクターが非finalメソッドを呼び出すと、サブクラスがそのメソッドを再定義して、驚くべきまたは望ましくない結果をもたらす可能性があります。
クラス全体をfinalとして宣言することもできることに注意してください。finalと宣言されたクラスは、サブクラス化できません。これは、たとえば、Stringクラスのような不変のクラスを作成する場合に特に便利です。
総括する
クラスまたはメソッドの1つfinal
をJava
継承できません。
例
クラス(Integer
ソースコード):
package java.lang;
import java.lang.annotation.Native;
// import ...
import static java.lang.String.UTF16;
public final class Integer extends Number // Final类不能被继承,但是可以extend或implement别的非final类
implements Comparable<Integer>, Constable, ConstantDesc {
@Native public static final int MIN_VALUE = 0x80000000;
@Native public static final int MAX_VALUE = 0x7fffffff;
@SuppressWarnings("unchecked")
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
// 此处省略n行
/** use serialVersionUID from JDK 1.0.2 for interoperability */
@Native private static final long serialVersionUID = 1360826667806852920L;
}
方法:
class ChessAlgorithm {
enum ChessPlayer {
WHITE, BLACK }
// ...
final ChessPlayer getFirstPlayer() {
// 不能被继承,但是可以被调用
return ChessPlayer.WHITE;
}
// ...
}
2、final
属性/変数
Java
のfinal
属性または変数はの変数に類似C/C++
しており、const
変更できません。
例:
public class Information {
private static final int WIDTH = 170, HEIGHT = 135; // final属性,可以为private
public static final int SIZE = WIDTH * HEIGHT; // 也可以为public
public int getDifference() {
final int difference = WIDTH - HEIGHT; // 函数中的final变量
return difference;
}
}