finalについて:簡単に説明すると
finalとは、
修飾子
の一つでありJavaの
キーワード
の一つです。
finalについて:もっと詳しく
この修飾子 final は、
クラス
・
メソッド
・
変数
の3つに適用されます。
final をつけて宣言されたものは変更することが出来なくなります。
クラス・メソッド・変数の個々のケースについて、どのように変更できなくなるのかを端的にまとめると
以下のようになります。
- finalで宣言されたクラスは継承できない。
- finalで宣言されたメソッドはオーバーライドできない。
- finalで宣言された変数には1度しか代入できない(定数になる)。
いずれの場合も規則を無視するとコンパイルエラーとなります。
それぞれのケースについて、実際のコードで確認していきましょう。
まずはクラスを final で宣言する場合です。
次のコードを見てください。
class Test{
public static void main( String args[] ){
Super sp = new Super();
Sub sb = new Sub();
sp.printTest();
sb.printTest();
}
}
final class Super{
public void printTest(){ System.out.println( "test" ); }
}
class Sub extends Super{
}
クラス Sub は クラス Super を
継承
しようとしています。
しかし、クラス Super は final で宣言されているので継承できずにコンパイルエラーになります。
>javac Test.java
Test.java:13: final Super からは継承できません。
class Sub extends Super{
^
エラー 1 個
このように、final で宣言されているクラスは継承できません。
ところで、上記のコードから final を削除してあげれば、正常に継承できるようになります。
確認してみて下さいね。
>javac Test.java
>java Test
test
test
続いてメソッドを final 宣言する場合を見てみましょう。
final 宣言されたメソッドは
オーバーライド
はできませんが、継承はできます。
継承を禁止するのは
修飾子
の
private
なので、混同しないようにしましょう。
class Test{
public static void main( String args[] ){
Super sp = new Super();
Sub sb = new Sub();
sp.printTest();
sb.printTest();
}
}
class Super{
public final void printTest(){ System.out.println( "test" ); }
}
class Sub extends Super{
}
>javac Test.java
>java Test
test
test
コンパイル、実行ともに問題ありませんね。
それでは、final 宣言したメソッドを
オーバーライド
してみましょう。
class Test{
public static void main( String args[] ){
Super sp = new Super();
Sub sb = new Sub();
sp.printTest();
sb.printTest();
}
}
class Super{
public final void printTest(){ System.out.println( "test" ); }
}
class Sub extends Super{
public void printTest(){ System.out.println( "I am Sub!" ); }
}
>javac Test.java
Test.java:14: Sub の printTest() は Super の printTest() をオーバー
ライドできません。;オーバーライドされたメソッドは final です。
public void printTest(){ System.out.println( "I am Sub!" ); }
^
エラー 1 個
コンパイルエラーになってしまいますね。
このように final 宣言されたメソッドはオーバーライドするとコンパイルエラーとなります。
最後に変数の場合を見てみましょう。
変数を final で宣言すると1度だけしか代入できなくなります。
class Test{
public static void main( String args[] ){
final int TEISU = 5;
TEISU = 99;//2回目の代入
System.out.println( "TEISU = " + TEISU );
}
}
>javac Test.java
Test.java:4: final 変数 TEISU に値を代入することはできません。
TEISU = 99;//2回目の代入
^
エラー 1 個
4行目で2回目の代入をしているので、コンパイラに怒られました。
これは分かりやすいですね。
ちなみに代入は1度しかできませんが、必ずしも宣言時に代入する必要はありません。
class Test{
public static void main( String args[] ){
final int TEISU;
TEISU = 99;//1回目の代入
System.out.println( "TEISU = " + TEISU );
}
}
>javac Test.java
>java Test
TEISU = 99
以上、final については、クラス・メソッド・変数それぞれの場合で
どのように作用するのか、きちんと抑えておきましょう。
|
SJC-P対策問題集
Java認定試験( SJC-P/310-035 )対策のメルマガ問題集も好評発刊中!
もちろん無料です。
またバックナンバーも見やすくしてオンライン問題集として随時アップしていきます。
受験しない人でも Java の基礎知識を学習するのに最適です。
SJC-P対策参考書
現在、Java認定試験(SJC-P/310-035)対策の参考書は本当にたくさん出版されてます。
ここでは、その中から厳選した本当に役立つ参考書を紹介します。
無駄な出費を抑えるためにも、ぜひ参考にして下さい。
SJC-P対策Java用語集
Java認定試験( SJC-P/310-035 )合格のために必要な Java の用語を集めました。
試験対策にはもちろん、試験以外で Java を学習する際にもご活用下さい。
更新履歴
このサイトの最新情報はここで確認できます。
また、今までこのサイトがどのような軌跡を辿ってきたのかも知ることができます。
Javaを始める人へ
これからJavaを始めようとしているあなたへ。
Javaの勉強を始めるにはどうしたら良いのかを説明しています。
また、初心者に役立つ情報を提供していきます。
Java認定資格の概要
Java認定資格にはどのようなものがあるのか。
資格取得のためにはどのような知識が必要なのか。
その他、資格を取得することのメリットなど、Java認定資格の概要を説明します。
LINK
Javaの勉強に役立つリンク。
その他のプログラミングに関するリンク。
ソフトウェアに関するリンクなど、管理人の主観で集めたリンク集です。
相互リンクも常時募集中!
詳細は以下のページで確認して下さい。
このサイトについて
このサイト「1発合格★Java認定試験!」についての説明です。
サイトで掲載しているソースコードや問題や免責事項などについて説明しています。
初めての人は一度のぞいてみて下さい。
ちょっとひと息
仕事や試験勉強に疲れたら、ここでちょっと一息つきませんか。
一生懸命に打ち込むのも良いけど、たまには何も考えずにゆっくり休むのも良いものです。
たまにはのんびり脳みそをリフレッシュしましょう。
|