Это мой код
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" ) ;
}
}
Я обнаружил, что с или без финального mdifer в A1.A11 программа компилируется и запускается.
Я могу понять, что без финального модификатора, A1.A12 может видеть и, таким образом, переопределять забавный метод.Это личное, но они находятся в одном классе, поэтому проблем с видимостью нет.
Я не могу понять, почему он работает с модификатором final.Не следует ли запретить переопределение в A1.A12?
Это вывод программы с последним модификатором на месте
java alpha/A1
A11: HelloHello
Если он просто игнорировал другой забавный метод, тогда
- если бы компилятор не жаловался на супер-ссылку
- , то A11 не был бы в выводе