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的抽象編程思想。
     
      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM