歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java中的向上轉型和向下轉型

Java中的向上轉型和向下轉型

日期:2017/3/1 9:16:41   编辑:Linux編程

首先要明白一點Java中的向上轉型和向下轉型他們都是建立在繼承的基礎上。

一.向上轉型

子類到父類的轉換通常稱作向上轉型,通俗的說就是定義父類對象指向子類對象。

下面通過一個例子來深入理解向上轉型.

//定義一個抽象的動物父類

public abstract class Animal

{

public abstract void Play();//此處需注意抽象方法沒有方法體

}

//定義一個狗狗類,繼承自Animal

public class Dog extends Animal

{

//重寫父類的Play方法

public void Play()

{

System.out.println("狗狗正在歡快的玩耍。。。。。");

}

//子類還有自己特有的eat方法

public void eat()

{

System.out.println("狗狗正在歡快的吃著。。。。。");

}

}

//測試類

public void Test

{

public static void main(String[] args) {

Animal animal=new Dog();//向上轉型,父類對象指向子類對象

animal.Play();//能正常編譯

animal.eat();//編譯不通過,父類的引用無法調用子類特有的方法

}

}

從上面這個例子可以總結出自樂裝換成父類時的規則:

01.將一個父類的引用指向一個子類對象,稱為向上轉型,自動進行類型轉換。

02.通過父類引用變量調用的是子類覆蓋或繼承父類的方法,不是父類的方法。

03.通過父類引用變量無法調用子類特有的方法。

二.向下轉型

上面已經說到,當向上轉型發生後,將無法調用子類特有的方法。但是當需要調用子類特有的方法時,可以通過將父類在轉換為子類來實現。

向下轉型:將一個指向子類對象的父類引用賦給一個子類的引用,稱為向下轉型。注意:必須進行強制類型轉換。

//定義一個抽象的動物父類

public abstract class Animal

{

public abstract void Play();//此處需注意抽象方法沒有方法體

}

//定義一個狗狗類,繼承自Animal

public class Dog extends Animal

{
}

//定義貓類,繼承自Animal

public class Cat extends Animal

{

}

public class Test

{

Animal animal=new Dog();

Dog dog=(Dog)animal;//向下轉型,強制轉換為狗狗對象

Cat cat=(Cat)animal;//運行出錯

}

向下轉型:轉型時轉的類型必須是父類對象所指的真實子類對象,不是任意的強制類型轉換。

最後總結一下吧!

1、父類引用可以指向子類對象,子類引用不能指向父類對象。

2、把子類對象直接賦給父類引用叫向上轉型,向上轉型不用強制轉型。

3、把指向子類對象的父類引用賦給子類引用叫向下轉型,要強制轉型。

4、向上轉型會丟失子類特有的方法,但是子類overriding 父類的方法,子類方法有效

5、向上轉型的作用,減少重復代碼,父類做為參數,調用時子類作為參數,就是利用了向上轉型。這樣使代碼變得簡潔。體現了JAVA的抽象面向對象編程。

Copyright © Linux教程網 All Rights Reserved