《On Java 8》第9章 多态

方法调用绑定

将一个方法调用和一个方法主体关联起来称作绑定。

若绑定发生在程序运行前(如果有的话,由编译器和链接器实现),叫做前期绑定。前期绑定是面向过程语言默认的绑定方式,例如 C 语言中,就只有前期绑定这一种方法调用。

在运行时根据对象类型进行绑定,叫做后期绑定,也称为动态绑定或运行时绑定。也就是说编译器不知道对象的类型,但是方法调用机制能找到正确的方法体并调用。每种语言的后期绑定机制不同,但是可以想到,对象中一定存在某种类型信息。

Java 中除了 static 和 final 方法(private 方法也是隐式的 final)外,其他所有方法都是后期绑定。

构造器内部多态方法的行为

class Glyph {
    void draw() {
        System.out.println("Glyph.draw()");
    }

    Glyph() {
        System.out.println("Glyph() before draw()");
        draw();
        System.out.println("Glyph() after draw()");
    }
}

class RoundGlyph extends Glyph {
    private int radius = 1;

    RoundGlyph(int r) {
        radius = r;
        System.out.println("RoundGlyph.RoundGlyph(), radius = " + radius);
    }

    @Override
    void draw() {
        System.out.println("RoundGlyph.draw(), radius = " + radius);
    }
}

public class PolyConstructors {
    public static void main(String[] args) {
        new RoundGlyph(5);
    }
}

// 运行结果:
Glyph() before draw()
RoundGlyph.draw(), radius = 0
Glyph() after draw()
RoundGlyph.RoundGlyph(), radius = 5

在基类的构造器中,能安全调用的只有基类的 final 方法(也适用于被看作 final 的 private 方法)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值