1. 向上转型
首先看一个例子:
public class Quadrangle {
public static void draw(Quadrangle q){
// some sentences...
System.out.println("draw");
}
}
public class Parallelogram extends Quadrangle {
public static void main(String args[]) { //实例化平行四边形类对象引用
Parallelogram p = new Parallelogram(); //调用父类方法
draw(p);
}
}
在上面的例子中,平行四边形继承了四边形类,四边形类中有一个draw()方法,它的参数是Quadrangle类型,而在四边形类的主方法调用却是Parallelogram类型。这里说明了一个问题,平行四边形也是四边形类的。所以这句话就等价于 Quadrangle obj = new Parallelogram(); 就是把子类型赋值给父类型变量,这种技术就叫做向上转型,父类定义的方法完成各个子类的功能,这样就可以使同一份代码无差别的运用到不同类型上,这也是多态的基本思想。
2. 向下转型
向下转型使将较为抽象的类转换为具体的类,但是这样做转换会出现一定的问题,比如四边形不是平行四边形的一种,所有的鸟不都是鸽子等等。子类一定是父类的一个实例,但是父类不一定是子类的实例,这时候就要加上显式类型转换
Quardrangle q = new Parallelogram();
Parallelogram p = (Parallelogram) q;