1.当在对象方法A里调用对象方法B时,实行动态绑定机制,A方法会暂时绑定过去运行类型里,然后优先在运行类型里找B方法,
2.当在对象方法里调用对象属性时,没有动态绑定机制,调用属性的方法在哪个类就在哪个类找属性。
public class Test { public static void main(String[] args) { A a = new B(); System.out.println(a.b());//虽然a运行类型是B,但因为属性不会动态绑定,所以这个输出的age还是A类的age System.out.println(a.a());//a的运行类型是B,a()暂时绑定到B类,调用B类的b(),结果是3 } } class A { int age; int num; public int a() { return b() + 2; } public int b() { return age; } } class B extends A { int age = 1; String name; public int b() { return age; } }