JAVA向上轉型和向下轉型(一)
在我們工作的時候通常會看到這樣的程式碼:
Map<String,Object> m = new HashMap<String,Object>();
List<Object> l = new ArrayList<Object>();
question1: m和 l 是 物件嗎?不要急於回答問題,請看下面兩行程式碼:
Human human;
human = new Human("亞當");
這兩行程式碼等同於:Human human = new Human("亞當");
question2:我們知道在Java中new是用來在堆上建立物件用的,如果human是一個物件的話,為什麼還要再通過new來 創 建呢?如果不是物件,那麼human是什麼?如同question1中所問: m和l是什麼?OK! 有點迷惑吧(大牛請忽略!!!),來跟著我把下面一段話讀一遍:
“每種程式語言都有自己的資料處理方式。有些時候,程式設計師必須注意將要處理的資料是什麼型別。你是直接操縱元素,還是用某種基於特殊語法的間接表示(例如C/C++裡的指標)來操作物件。所有這些在 Java 裡都得到了簡化,一切都被視為物件。因此,我們可採用一種統一的語法。儘管將一切都“看作”物件,但操縱的識別符號實際是指向一個物件的“引用”(reference)。”——《JAVA程式設計思想》
沒錯,m、l和 human 不是物件,他們是物件的引用變數,human是指向“亞當”物件(Human 類的一個例項)的引用。他們不在堆中,一些基本型別的變數和物件的引用變數都是在函式的棧記憶體中分配。
現在我建立一個兩個類 Man和 Woman 繼承 Human。請看下面程式碼:
Human h;
h = new Man("亞當");
建立了一個 Human的引用 h 然後又將h指向了一個Man物件的例項(亞當);一個父類引用指向了一個子類物件,也就是說把子類轉化成了父類來用,這就叫做“向上轉型”。 什麼是向下轉型呢?
向下轉型:父類引用的物件轉換為子類型別稱為向下轉型。請看向下轉型的例子:
1. Man m = (Man) h;
2. Human h1 = newHuman("夏娃");
3. Woman m = (Woman)h1;
未完待續!!!
相關文章
- 向上轉型和向下轉型
- 多型,向上向下轉型多型
- 向下轉型的注意事項與instanceof的使用
- scala和java資料型別轉換Java資料型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- Java中String和byte型別互相轉換Java型別
- Java資料型別及型別轉換Java資料型別
- Java入門系列-05-資料型別和型別轉換Java資料型別
- Java資料型別的顯式轉換和隱式轉換Java資料型別
- 【Java】資料型別轉換Java資料型別
- java中的型別轉換Java型別
- java基本型別和物件之間的轉換Java型別物件
- Scrum轉型(一) 為什麼敏捷和ScrumScrum敏捷
- 物件轉型物件
- 型別轉換(int 和 String)型別
- mysql bigint型別和datetime型別的轉換MySql型別
- 2、java資料型別轉換Java資料型別
- JAVA型別轉換怎麼變Java型別
- 自學java筆記I 基本型別+轉義字元+資料型別的轉換Java筆記字元資料型別
- 向上向下傳遞資料
- 向上領導,向下賦能
- Java資料型別自動轉換(++ ,+=)Java資料型別
- Java 8型別轉換及改進Java型別
- java 基本型別的轉換規則Java型別
- 型別轉換型別
- 資料型別,型別轉換資料型別
- java 基礎型別與byte[]的轉換Java型別
- [Java基礎]之 資料型別轉換Java資料型別
- Java註釋,識別符號,資料型別,型別轉換Java符號資料型別
- 轉向Kotlin——泛型Kotlin泛型
- js型別轉換JS型別
- 型別轉換(cast)型別AST
- Convert型別轉換型別
- 數字化轉型
- BigDecimal轉為String型別、int型別Decimal型別
- 什麼是數字化轉型,如何理解數字化轉型?
- JS 型別轉換,小嚐一口JS型別
- 附一張js的型別轉換JS型別
- Mybatis實踐(一)型別轉換器MyBatis型別