java中复写方法和同名变量的调用问题

  子类对象调用 上转对象调用 复写方法中调用 继承方法中调用
复写方法(方法存在复写) Y Y Y Y
同名变量(成员变量只是被隐藏) Y N Y N
  1. 方法可以被复写,没有this、super引用下,总是调用复写方法;
  2. 变量不存在复写,父类变量只是被隐藏了,没有this、super引用下,继承方法、上转对象调用隐藏变量;子类对象、复写方法调用同名变量;
  3. 根本原因是由于java的绑定:
    1. 静态绑定:依据静态类型(外观类型),例如:
      1. 编译期,依据参数静态类型(静态分派),进行方法重载;
      2. 字段调用,依据所有者静态类型;
      3. 非虚方法:static静态方法、private私有方法、实例构造器、父类方法、final方法
    2. 动态绑定:依据实际类型,例如:
      1.  方法的复写(动态分派),依据方法的所有者(接收者)的实际类型;

猜你喜欢

转载自blog.csdn.net/qq_32331073/article/details/78492536
今日推荐