• 10.3 对象类型的转换


    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 }
    View Code

    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 }
    View Code

  • 相关阅读:
    11
    TSP-test
    TSP-SA_TSP
    TSP-PathLength
    TSP-OutputPath
    TSP-NewAnswer
    TSP-
    TSp-dsxy2figxy
    TSP-DrawPath
    TSP-Distanse
  • 原文地址:https://www.cnblogs.com/studycode/p/9533155.html
Copyright © 2020-2023  润新知