---------------------------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-----------------------------------------
运行时类型信息可以在程序运行时发现和使用类型信息,由于面向类型的操作只能在编译器得到执行。在运行时识别对象和类的信息主要有两种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型;另一种是反射机制,它允许我们在运行时发现和使用类的信息。
在面向接口编程的思想下,我们尽量让代码只操纵基类,比如在创建一个基类Shape,从该类可以派生出斗个具体类,如Circle、Square、Triangle。
abstract class Shape
{
void draw()
{
System.out.println(this+".draw()");
abstract public String toString();
}
class Circle extends Shape
{
public String toString()
{
return "Circle";
}
}
Public Squre extends Shape
{
public String toString()
{
return "Squre";
}
}
Public 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();
}
}
基类中包含draw()方法,通过this参数给System.out.println(),间接地使用toString()方法打印类标识符。在此例子中使用了泛型,Shape对象放入容器中会自动向上转型,可是在向上转型的时候也会丢失具体类型。当从数组中取出元素时,容器会把所有的事物都当作Object持有,也会自动将结果转型回Shape。在java中,所有类型转化多是在运行时进行正确性检查。