我想知道将一个私有方法声明为final是否有意义,我认为没有意义。但是我想象中存在一种独特的情况,并编写了代码来解决:
public class Boom {
private void touchMe() {
System.out.println("super::I am not overridable!");
}
private class Inner extends Boom {
private void touchMe() {
super.touchMe();
System.out.println("sub::You suck! I overrided you!");
}
}
public static void main(String... args) {
Boom boom = new Boom();
Boom.Inner inner = boom.new Inner();
inner.touchMe();
}
}
代码编译并正常运行。我想:"我应该将touchMe()声明为final",于是我这么做了:
public class Boom {
private final void touchMe() {
System.out.println("super::I am not overridable!");
}
private class Inner extends Boom {
private void touchMe() {
super.touchMe();
System.out.println("sub::You suck! I overrided you!");
}
}
public static void main(String... args) {
Boom boom = new Boom();
Boom.Inner inner = boom.new Inner();
inner.touchMe();
}
}
它也可以工作并告诉我
chicout@chicout-linlap:~$ java Boom
super::I am not overridable!
sub::You suck! I overrided you!
为什么?
Boom inner = boom.new Inner();
- Tom Hawtin - tacklinesuper...
吗?更新 不需要。我的错。我明白了。 - DerMikesuper.touchMe();
... - Yousha Aleayoub