1、向上转型
a、平行四边形类继承了四边形类,常规的继承图都是讲顶级类设置在页面的顶部,然后逐渐向下,所以将子类对象看做是父类对象被称为“向上转型”。由于向上转型是ongoing一个具体的类型到较抽象类型的转换,所以它总是安全的,如可以说是平行四边形是特殊的四边形,但不能说四边形是平行四边形。
b、如果在四边形父类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到父类中定义一个方法完成各个子类的功能,这样可以使用同一份代码毫无差别地运用到不同类型之上,这就是多态机制的基本思想(在10.6节中将对多态进行详细的介绍)。
例子10.5
1 package aaaa; 2 3 class Quadrangle{ //四边形类 4 public static void draw(Quadrangle q) { //四边形类中的方法 5 //SomeSentence 6 System.out.println("调用四边形draw()方法!"); 7 } 8 } 9 10 public class Parallelogram extends Quadrangle{ //平行四边形类,继承了四边形类 11 public static void main(String[] args) { 12 Parallelogram p = new Parallelogram(); //实例化平行四边形对象引用 13 draw(p); //调用父类方法 14 } 15 }
2、向下转型
a、通过向上转型可以推理出向下转型是讲较抽象类转为较具体的类。这样的转型通常会出现问题。可以说子类对象总是父类对象的一个实例,但父类对象不一定是子类对象的实例。
b、在做向下转型操作时,需要告知编译器这个四边形就是平行四边形。将父类对象强制转换为某个子类对象,这种方式成为现实类型转换。
c、当在程序中使用向下转型技术时,必须使用现实类型转换,向编译器指定将父类对象转换为哪一种类型的子类对象。
例子10.6
1 class Quadrangle_A{ 2 public static void draw(Quadrangle_A q) { 3 //SomeSentence 4 System.out.println("调用父类中的draw()方法"); 5 } 6 } 7 public class Parallelogram_A extends Quadrangle_A{ 8 public static void main(String[] args) { 9 draw(new Parallelogram_A()); //调用父类draw()方法 10 11 //将平行四边形类对象看做是四边形对象,成为向上转型操作 12 Quadrangle_A q = new Parallelogram_A(); 13 14 //将父类对象赋予子类对象,这种写法是错误的 15 //Parallelogram_A p = q; 16 17 //将父类对象赋予子类对象,并强制转型为子类型,这种写法是正确的 18 Parallelogram_A p = (Parallelogram_A)q; 19 draw(new Parallelogram_A()); //调用父类draw()方法 20 } 21 }
原文地址:https://www.cnblogs.com/studycode/p/9533155.html
时间: 2024-10-17 00:35:53