动态绑定与静态绑定辨析

1.静态绑定

使用父类类型储存子类对象,返回父类属性。使用子类类型储存子类对象,返回子类属性。这样属于静态绑定

先定义两个类:

class Father{
    int age=48;
}

class Son extends Father{
    id=13;
}

使用父类类型储存一个子类对象son1:

Father son1=new Son();
System.out.print(son1.age);

此时输出的年龄为48,使用了父类的属性。

使用子类类型储存一个子类对象son1:

Son son2=new Son();
System.out.print(son2.age);

此时输出的结果为24,显然使用了子类的属性。

综上属性是属于静态绑定的,即属于什么类型就使用谁的属性。

那么使用父类储存子类对象,访问子类独有属性id,按照静态绑定的定义来说,应该使用父类的该属性,由于父类无此属性,所以应当报错才对。

显然访问了子类的id属性,编译不通过,问题为id不属于此中的属性。所以无法找到。

2.动态绑定

父类和子类都有同样的方法 , 子类类型 存储 子类对象  , 调用的方法是 子类 的方法。 父类和子类都有同样的方法 , 父类类型 存储 子类对象  , 调用的方法是 子类 的方法。这样属于动态绑定。

class Father{
    int age=48;
    void say(){
    System.out.println("这是父类")
}
}

class Son extends Father{
    id=13;
       void say(){
    System.out.println("这是子类")
}
}

父类与子类中都定义了同样的方法say(),创建的对象为son1,son2如上所示:

这两个对象分别调用两个方法:

son1.say();
son2.say();

执行的结果为:

全都是执行了子类的方法,属于动态绑定,即根据对象而不是根据对象所属类型来调用方法。

那么调用静态方法呢?

将say()属性设置为static,执行结果为:

这个结果符合静态绑定的定义,所以当方法为静态方法时,采用的时静态绑定。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值