数组
Java的数组既可以保存原始数据类型,如:int, float, char, boolean等,也可以保存复杂对象,如:字符串、Robots类、Triangles类!
类似于C的指针数组,每格可指向一个对象。一旦获取对象,就可以自由调用该对象的属性、方法。
类变量和方法
使用情景:一个贯穿整个程序的counter。比如,一个名为population的counter变量,来追踪我们一共创建了多少个StyledStrings。而不是在循环中为每个三角形实例设计的counter。
不能用对象变量,因为每个StyledString类中都有一个对象变量。需要用一个“类”变量,比如static int populationSize = 0。这样这个cnt变量就绑定类了,而不是绑定对象。可自由调用。
使用static注意事项:类内变量是static时,使用这个static变量的类内方法也要是static的才可以。
类方法vs对象方法:有些方法,更适合“类关联”,而不适合作为“对象关联的”。比如,Math类的random()方法,是类相关而不是实例相关(非三角形、圆形等实例相关)的。
对象转型Casting
使用情景:一个基类的对象想调用子类的方法。比如,shape类下有Triangle类、Rectangle类、Circle类,而getVariant()是Triangle类下特有的方法,因此无法在使用一个通用的shape类对象同时,直接调用这个getVariant()方法。就需要向下转型。
子类的对象可以当作基类的对象来使用称作向上转型(up-cast),反之称为向下转型(down-cast / narrow-cast)
基类向下转型例子:
TwoDimentionalShape[] shapes = new TwoDimentionalShape[100];
...
TwoDimentionalShape firstShape = shapes[0];
Triangle firstTriangle = (Triangle) firstShape;//向下转型,使其相信firstShape是个Traingle.
TriangleVariant variant = firstTriangle.getVariant();
注意:如果被转型的元素本身不是Triangle,而是Rectangle——无法转型。无法将Rectangle转为Triangle。(因为他们不是“向上”,也不是“向下”。)