读thinking in java笔记(十三):类型信息

运行时类型信息使得你可以在程序运行时发现和使用类型信息。
1. 为什么需要RTTI
    看一个很熟悉的例子,它使用了多态的类层次结构。最通用的类型(泛型)是基类Shape,而派生出的具体类有Circle、Square和Triangle。
这里写图片描述
    这是一个典型的类层次结构图,基类位于顶部,派生类向下扩展。面向对象编程中最基本的目的是:让代码只操作对基类(这里是Shape)的引用。这样如果要添加一个新类来扩展程序,就不会影响到原来的代码。在这个例子的Shape接口中动态绑定了draw()方法,目的就是让客户端程序员使用泛化的Shape引用来调用draw()。draw()在所有派生类里都会被覆盖,并且由于它是被动态绑定的,所以即使是通过泛化的Shape引用来调用,也能产生正确的行为。这就是多态。
    因此,通常会创建一个具体对象(Circle,Square,或者Triangle),把它向上转型成Shape,并在后面的程序中使用匿名的Shape引用。可以像下面这样对Shape层次结构编码:

abstract class Shape {
  void draw() { System.out.println(this + ".draw()"); }
  abstract public String toString();
}

class Circle extends Shape {
  public String toString() { return "Circle"; }
}

class Square extends Shape {
  public String toString() { return "Square"; }
}

class Triangle extends Shape {
  public String toString() { return "Triangle"; }
}   

public class Shapes {
  public static void main(String[] args) {
    List<Shape> shapeList = Arrays.asList(
      new Circle(), new Square(), new Triangle()
    );
    for(Shape shape : shapeList)
      shape.draw();
  }
} /* Output:
Circle.draw()
Square.draw()
Triangle.draw()
*/

未完。。。。后续整理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值