これは私のコードです
package alpha ;
class A1
{
static class A11
{
private
final // WHAT IS THE EFFECT OF THIS MODIFIER?
void fun ( String caller )
{
System . out . println ( "A11:\t" + caller ) ;
}
}
static class A12 extends A11
{
private void fun ( String caller )
{
super . fun ( caller + caller ) ;
}
}
public static void main ( String [ ] args )
{
A12 a12 = new A12 ( ) ;
a12 . fun ( "Hello" ) ;
}
}
A1.A11の最後のmdiferがある場合とない場合で、プログラムがコンパイルされて実行されることがわかりました。
最後の修飾子がないと、A1.A12はfunメソッドを表示してオーバーライドできることを理解できます。プライベートですが、同じクラスに属しているため、視認性の問題はありません。
なぜそれがfinal修飾子で機能するのか理解できません。A1.A12でのオーバーライドを禁止すべきではありませんか?
これは、最終的な修飾子が配置されたプログラムの出力です。
java alpha/A1
A11: HelloHello
それが単に他の楽しい方法を無視していたなら、
- コンパイラはスーパーリファレンスについて文句を言っていなかっただろう
- A11は出力に含まれません