救助,Java中adstract类方法的覆盖问题

不是说非静态方法只能覆盖不能隐藏嘛?为什么下面的代码输出aa?不应该被子类的同名方法覆盖了嘛?

public class Main
{
public static void main(String args[]){
bb b=new bb();
b.p();
}
}
abstract class aa{
public void x(){
System.out.println("aa");
}
}
class bb extends aa{
public void x(){
System.out.println("bb");
}
public void p(){
super.x();
}
}

因为你void p() 方法中,super.x()调用的是父类的。

你的方法p中执行的是父类中的方法,输出的当然是aa了,只有你执行bb中与父类中相同的方法时,父类中的才能给覆盖掉

图片说明

super 的意思就是调用父类的方法。去掉 super,在 p 方法中直接写 x() 就是调用自己的方法了。
又或者在 main 方法中这样写,用 aa 父类引用指向子类对象,再调用 x 方法,输出就是 bb 了:
public static void main(String args[]) {
aa b = new bb();
b.x();
}


super 你懂我意思吧?