• JAVA的向上转型 和 向下转型


    1. 向上转型 是面向对象继承的一种形式,是指子类对象转换为父类对象。

      看下面的example

      class Instrument {
          public void play() {
              System.out.println("Instrument play");
          }
          static void tune(Instrument i) {
              
              //
              i.play();
          }
      }
      
      public class Test1 extends Instrument {
          public static void main(String [] args) {
          Test1 w = new Test1();
          Instrument.tune(w);
          }
      }
      
      
      // out put
      
      Instrument play 
                
                导出类转型为基类,在继承图上是向上移动的,因此一般称为向上转型。
                在向上转型的过程中,子类唯一可能发生的事情是丢失方法,子类的新有的方法都会丢掉。
     
    1.    向下转型: 父类引用的对象转换为子类类型称为向下转型。
         看下面的代码
        
      class Animal {
          public void eat() {
              System.out.println("Animal eat");
          }
      }
      
      class Dog extends Animal{
          
          @Override
          public void eat() {
              System.out.println("Dog eat");
          }
          
          public void cry() {
              System.out.println("Dog cry");
          }
      }
      
      public class Test1 {
          public static void main(String[] args) {
              Animal d1 = new Dog();
              d1.eat();
              
              Dog d = (Dog) d1;
              d.eat();
              d.cry();
              
              Animal d2 = new Animal();
              Dog d3 = (Dog) d2;
              d3.eat();
              d3.cry();
          }
      }
                向下转型
        
        1、父类引用可以指向子类对象,子类引用不能指向父类对象。
                2、把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。
               如Father father = new Son();
                3、把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。
               如father就是一个指向子类对象的父类引用,把father赋给子类引用son 即Son son =(Son)father;
               其中father前面的(Son)必须添加,进行强制转换。
                4、upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效
                5、向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。
         
          
  • 相关阅读:
    ResultSet取结果集多少条记录方法及分页概要
    java ResultSet 结果集处理 createStatement() 里参数的意义(第一弹)
    提高mysql千万级数据SQL的查询优化30条总结
    WEBGL学习【十三】鼠标点击立方体改变颜色的原理与实现
    WEBGL学习【十二】鼠标操作场景
    WEBGL学习【十一】光照模型
    WEBGL学习【十】运动模型
    WEBGL学习【九】立方体贴不同的纹理
    WEBGL学习【八】模型视图投影矩阵
    WEBGL学习【七】画布绘图
  • 原文地址:https://www.cnblogs.com/wypeng/p/7575257.html
Copyright © 2020-2023  润新知