class Demo{
private void method(){
System.out.println("haha");
}
class Ex extends Demo{
private void method(){
System.out.println("gaga");
}
}
public static void main(String[] args){
Demo b=new Demo();
Demo a=b.new Ex();
a.method();
}
输出结果:haha
内部类覆盖了method()方法而且运行成功了,另外这里为什么没有多态,应该输出的是gaga呀
简单说,private方法不能被继承,这个在java SE说明书中有描述,不能被继承的就没有了多态的前提条件。这点跟c++不同。
http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2
private方法只可以在类的内部使用,在类外根本访问不到, 而final方法可以在类外访问,但是不可以重写该方法,就是说可以使用该方法的功能但是不可以改变其功能,这就是private方法和final方法的最大区别