1.非静态方法。
就拿Father f = new Father(); f.f(); 这两句代码为例,当父类引用型变量f调用f()方法时,他首先尝试调用父类的方法,但如果检测到有子类继承了父类,并覆盖了父类中的方法时,就会去调用子类的方法(这仅仅是我自己的理解,Java真实的运行机制并不一定是这样。。。)。我们可以这样去理解上述内容的逻辑,既然子类继承了父类,并复写了父类中旧有的方法,那么子类中的新方法,必然是对父类旧方法的增强、提升和改进,否则就没有复写的必要,既然子类中的新方法更好,那么虚拟机可能默认会在这种情况下去调用子类新的更好的方法,而不运行父类的旧方法。在这里可能Java内部的机制将父类中的旧方法和子类中的新方法联系了起来,当调用父类的方法时自动指向了子类的方法。我们应该把子类想成是在父类基础上的增强和提升,而不是独立的一个新的类,子类的核心还是父类。