Java关于动态绑定到小例子

abstract class A{
    public A(){
        b();
    }
    abstract void a();
    abstract void b();
}
abstract class B extends A{
    @Override
    void a() {
        System.out.println("正在调用B类a方法");
    }
    @Override
    void b(){
        System.out.println("正在调用B类b方法");
    }
}
class C extends B{
    @Override
    void b(){
        System.out.println("正在调用C类b方法");
    }
}
public class Test {
    public static void main(String[] args){
        new C();
    }
}

我们平时在写java时,每天都在创建对象,那么看看上面的例子会不会也很熟悉呢...

创建对象C,在基类的构造器中调用b方法,那么java怎么会知道该调用在B类实现的b方法呢,还是在C类中实现的b方法呢?

上面程序会输出"正在调用C类b方法",没错,不是“正在调用B类b方法”,这是因为java的动态绑定决定的,假象一下,在A类的构造器中,在调用b方法时,A类会说是谁在调用我,其实在实例化C时,注册了C对象的this,A的构造器会用c的对象调用b()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值