26 02向上轉型和向下轉型的總結和作用


向上轉型:父類引用指向子類對象,例如:Father f1 = new Son();  當子類向上造型后的對象的方法中不存在子類的自己的特色的方法,只有父類的方法。而且子類對於父類進行重寫的方法。向上造型的對象的方法為重寫后新的方法。

在這個例子中 person類分別是man,weman,child 的父類

package DAY12;

public class Demo {

    public static void main(String[] args) {
        Person p=new man();//向上轉型,編譯是Person對象,運行的時候是man類對象 聲明是父類,調用的方法卻只能是子類的
        System.out.println(p.getClass());//class DAY12.man
        p.speak();// 我是man類          此時運行調用的是man類中的方法
    }

}
class Person{
    String name;
    int age;
    void speak()
    {
        System.out.println("我是Person類,是所有人的父類");
    }
}
class man extends Person
{
    void speak() {
        System.out.println("我是man類");
    }
    void doThing() {
        System.out.println("我是man類,我可以做重活"); //這是子類的特有方法
    }
}

class weman extends Person
{
    void speak() {
        System.out.println("我是weman類");
    }
    void doThing() {
        System.out.println("我是weman類,我可以做針線活"); //這是子類的特有方法
    }
}

class child extends Person
{
    void speak() {
        System.out.println("我是child類");
    }
    void doThing() {
        System.out.println("我是child類,我可以玩游戲"); //這是子類的特有方法
    }
}

.向下造型:把指向子類對象的父類引用賦給子類引用,需要強制轉換,父類引用的對象轉換為子類類型。但是對於父類的引用對象一定要是由子類實例化的,也就是說向下造型的出現一般的情況都是和向上造型一起出現的。例如:

Father f1 = new Son();

Son s1 = (Son)f1;

但有運行出錯的情況:

Father f2 = new Father();

Son s2 = (Son)f2;//編譯無錯但運行會出現錯誤

在不確定父類引用是否指向子類對象時,可以用instanceof來判斷:

if(f3 instanceof Son){

     Son s3 = (Son)f3;

}

也可以來個通俗點的:

A類是父類,B類是子類

A a = new A(); B b = new B();

A a1 = b; ---向上造型

B b1 =(B)a1;-----向下造型

B b2 = (A)a;--------這個就會報錯。ClassCastException

詳情可以看我的https://www.cnblogs.com/xuwangqi/p/11106535.html

作用:就好像是一個工廠可以生產多種品牌的電腦,那么我們讓工廠生產的時候如果是按品牌給工廠,那么我們要工廠開多個品牌的流水線生產,而不同品牌的電腦又可以統稱為電腦,這個時候我們給工廠就讓他生產電腦,等他生產出來的時候我們在貼上不同品牌的商標。這樣讓工廠的使用更方便了。

這個過程就是電腦作為不同品牌的父類,生產的時候先向上轉型成電腦,隨后在向下轉型轉換為個品牌的電腦。講的不好,請諒解。


---------------------
作者:Syaxis
來源:CSDN
原文:https://blog.csdn.net/syaxis/article/details/54585086
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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