多态绑定机制

多态绑定机制分为静态绑定和动态绑定。

  • 静态绑定:编译器准确地知道应该调用哪个方法。即在程序执行前方法已经被绑定。比如private方法,static方法,final方法或者构造器。
  • 动态绑定:在程序运行时能够自动地选择调用哪个方法。即在运行时根据具体对象的类型进行绑定。

通过引用类型变量访问所引用的方法和属性的绑定机制

基类:

package six;
public class Base {
    String var = "BaseVar";
    static String staticVar = "staticBaseVar";
    public void method(){
        System.out.println("BaseMethod");
    }
    static void staticMethod(){
        System.out.println("staticMethod of Base");
    }
}

子类:

package six;
public class Sub extends Base{
    String var = "SubVar";
    static String staticVar = "staticSubVar";
    public void method(){
        System.out.println("SubMethod");
    }
    static void staticMethod(){
        System.out.println("staticMethod of Sub");
    }
    public static void main(String[] args) {
        Base b = new Sub();//b被声明为base类型,引用Sub实例
        b.method();//打印Sub实例的method()方法。如果父类没有method()方法,则会报错。
        b.staticMethod();//打印Base类的staticMethod()方法
        System.out.println("var="+b.var+"***********"+"staticVar="+b.staticVar);//打印Base类的成员变量
    }
}

打印结果:

SubMethod
staticMethod of Base
var=BaseVar***********staticVar=staticBaseVar

由此可见

  1. 实例方法与引用变量所引用的对象的方法绑定;
  2. 静态方法与引用变量所声明的类型的方法绑定;
  3. 成员变量(实例变量、静态变量)与引用变量所声明的类型的成员变量绑定。

- 辣么,为啥子嘞?


当父类引用指向子类对象时,由于是父类对象,所以编译器会先从父类中寻找相应实例方法,如果没有该实例方法,则编译错误。如果父类有实例方法,子类中也有该实例方法,则会覆盖父类 的实例方法,执行子类的实例方法。
由于静态方法不能被覆盖,准确说应该是静态绑定,所以只能与所声明类型的方法绑定。
至于变量,更是没有覆盖这一说,所以只能与所声明的类型的成员绑定啦啦啦~~~~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值