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

动态绑定也叫后期绑定。就是在运行时根据对象的类型进行绑定。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语句里发生的。

猜你喜欢

转载自blog.csdn.net/lll0101/article/details/88722353
今日推荐