度々お世話になります。
private finalなメンバクラスは何を防いでいるのですか。
メンバクラスをどっかのクラスが継承することはないように思えます。
もしかして、メンバクラスのメソッドのオーバーライドですか?
詳しいことをご存知のかた、教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
クラスに与える修飾子finalは「派生クラスを作れない具象クラス」という意味なので、privateなクラスに対して間違って派生クラスを定義することのないようにするという以上の意味はないと思います。
メンバクラスをどっかのクラスが継承することはないように思えます。
privateなクラスAは限定的ですが継承できます。それはAを囲むクラスの別の内部クラスでAを継承するケースです。
java
1class Outer { 2 private class A {} 3 class B extends A {} 4}
内部クラスAをprivateにするとOuterの外側からはAは見えませんが、OuterやOuter内の別の内部クラスからは見えるので、Aを派生させて別の内部クラスBを定義できます。
しかし上記のAをprivate finalとするとBの定義箇所で「Aはfinalなのでそれを継承できない」というエラーになってくれます。
投稿2017/05/18 12:31
総合スコア18394
0
継承させないようにでしょう。
メンバクラスをどっかのクラスが継承することはないように思うのは本人だけで、
他のプログラマはするかもしれません。
例えば複数のメンバークラスがいて、メンバークラスAをメンバークラスBが継承していたりなど
十分に考えられます。
そんなクラス構成にするかどうかという是非は置いておいて
文法上許されている以上、private final class
には特に違和感を持ちません。
投稿2017/05/18 12:25
総合スコア4666
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
http://d.hatena.ne.jp/java1rou/20070627/1182916015
へぇ、Javaってこんなふうになってんですね。
内容を要約すると、メンバクラスはその親がGC(ガベージコレクション)されても(実装によってはかな?)残ってしまうことがあるらしく、それ以降他のクラスやメソッドから変更が与えられないようにfinal修飾子を使う必要があるそうです。
Invokeとかで変更されないようにってことですかね。
投稿2017/05/18 11:01
総合スコア218
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/18 12:05 編集
2017/05/18 12:15
退会済みユーザー
2017/05/18 12:16
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/05/18 12:38