1.7伴随多态的可互换对象
绘图方法可以被同等地应用于圆、正方形、三角形,程序员并不想知道哪一段代码将被执行,而对象会依据自身的具体类型来执行恰当的代码。
后期绑定:非oop
前期绑定:oop
C++中使用virtual关键字实现多态,而Java中不需要额外添加关键字来实现多态
向上转型:将导出类看作是它的基类的过程。
下面给出“向上转型”的实际操作说明
基类:Shape
public class Shape {
void doSomething(Shape shape) {
//shape.draw();
//···
shape.say();
}
void say() {
System.out.println("Shape");
}
}
导出类:Circle
public class Circle extends Shape {
void say() {
System.out.println("It's a Cricle.");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Circle c = new Circle();
c.doSomething(c);
}
}
main方法的中c.doSomething(c)
的结果:
当Circle类型对象c被传入到预期接受Shape类型对象的方法中,究竟会发生什么???
由于Circle可以被doSomething()看作是Shape,即doSmoething()可以给发送给Shape的任何消息,Circle都可以接收。
“你是一个Shape”,我知道你可以say()你自己,那么去做吧,但要注意细节的正确性。
doSomething()的代码给人印象深刻在于:不知何故,它总是做了该做的
当一个对象发送消息时,即使涉及向上转型,该对象也知道要执行什么样的正确行为
1.8单根继承结构
在Java中(还包括除C++以外的所有OOP语言),所有的类都继承自单一的基类——Object。
单根继承结构保证所有的对象都具备某些功能,使垃圾回收器的实现变得容易得多(垃圾回收器是什么?????)