Java编程思想学习之多态动态绑定

博客介绍了Java中的动态绑定,即运行时根据对象类型绑定,除static和final方法外其他方法都是动态绑定。还给出书中“几何形状”例子,RandomShapeGenerator作为“工厂”,调用next()方法随机选择Shape对象产生引用,向上转型在return语句发生。

动态绑定也叫后期绑定。就是在运行时根据对象的类型进行绑定。Java中除了static方法和final方法(private属于final方法)之外,其它所有的方法都是动态绑定。
下面是书中“几何形状”的例子:

package com.ran.unit8;

import java.util.Random;

/**
 * 动态绑定
 */
class Shape{
    public void draw(){}
    public void erase(){}
}

class Circle extends Shape{
    @Override
    public void draw() {
        System.out.println("Circle draw");
    }

    @Override
    public void erase() {
        System.out.println("Circle erase");
    }
}
class Square extends Shape{
    @Override
    public void draw() {
        System.out.println("Square draw");
    }

    @Override
    public void erase() {
        System.out.println("Square erase");
    }
}

class Triangle extends Shape{
    @Override
    public void draw() {
        System.out.println("Triangle draw");
    }

    @Override
    public void erase() {
        System.out.println("Triangle erase");
    }
}
class RandomShapeGenerator{
    private Random rand = new Random(47);
    public Shape next(){
        switch (rand.nextInt(3)){
            default:
            case 0: return new Circle();
            case 1: return new Square();
            case 2: return new Triangle();
        }
    }
}
public class Shapes {
    private static RandomShapeGenerator generator = new RandomShapeGenerator();
    public static void main(String[]args){
        Shape[] shapes = new Shape[9];
        for (int i=0;i<shapes.length;i++){
            shapes[i] = generator.next();
        }
        for (Shape s:shapes
             ) {
            s.draw();
        }
    }
}

RandomShapeGenerator是一种“工厂”,每次调用next()方法时,他可以为随机选择的Shape对象产生一个引用。向上转型是在return语句里发生的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值