emo*_*ory 2 java final private modifiers
这是我的代码
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" ) ;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现在A1.A11中有或没有最终的mdifer,程序编译并运行.
我可以理解,如果没有最终修饰符,A1.A12可以看到并因此覆盖有趣的方法.它是私有的,但它们属于同一类,因此没有可见性问题.
我无法理解为什么它适用于最终修饰符.不应该禁止A1.A12的压倒一切吗?
这是具有最终修改器的程序的输出
java alpha/A1
A11: HelloHello
Run Code Online (Sandbox Code Playgroud)
如果它只是忽略了另一个有趣的方法那么
你的方法是私人的.
将其可见性更改为protected以查看预期行为,即仅当方法受到保护,公共或默认可见性时,覆盖的概念甚至存在.
做这样的事 -
class A1
{
static class A11
{
public
final // WHAT IS THE EFFECT OF THIS MODIFIER?
void fun ( String caller )
{
System . out . println ( "A11:\t" + caller ) ;
}
}
static class A12 extends A11
{
public void fun ( String caller )
{
super . fun ( caller + caller ) ;
}
}
public static void main ( String [ ] args )
{
A12 a12 = new A12 ( ) ;
a12 . fun ( "Hello" ) ;
}
}
Run Code Online (Sandbox Code Playgroud)
现在将抛出编译时异常
fun(java.lang.String) in A1.A12 cannot override fun(java.lang.String) in A1.A11; overridden method is final
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
286 次 |
最近记录: |