1. 程式人生 > >JAVA的向上轉型 和 向下轉型

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的抽象程式設計思想。