Major Softwares

  INDEX PAGE

  1. 簡介
  2. Java, Android和LibGDX好書推介
  3. Java, Android和LibGDX要學的知識
  4. 用Windows寫Java程式
  5. 用Eclipse寫Java程式
  6. 用Eclipse寫Android程式
  7. 用Eclipse寫LibGDX程式
  8. Standard Java Naming Conventions
  9. System.out.println()的用法和意思
  10. Where is main() method in Android?

LibGDX - Splash & Menu Screen

  1. LibGDX: World, Texture, Background, Camera, Viewport, Screen & OpenGL
  2. LibGDX: Texture, TextureRegion, SpriteBatch & Sprite
  3. UML(Unified Modeling Language): Class Diagram
  4. Type Casting, Upcasting & Downcasting
  5. @Override的用法和意思
  6. LibGDX: Scene2d & Graphical User Interface(GUI)
  7. LibGDX: Splash Screen
  8. LibGDX: Texture Packer
  9. LibGDX: BitmapFonts, JSON & Skin
  10. Android: R.java File
  11. Android: onClick事件的5種實現方式
  12. LibGDX: Game Menu Screen
  13. LibGDX: Advanced Game Menu Screen (using Abstract Screen)
  14. LibGDX: Disposable Interface
  15. Java & LibGDX: super keyword
  16. LibGDX: Advanced Game Menu Screen (using AssetManager)
  17. Java: Array, Arrays, List, ArrayList & LibGDX: Array
  18. LibGDX: File I/O (Preferences)
  19. LibGDX: Game Level Selection Screen
  20. LibGDX: Advanced Game Level Selection Screen (using AssetManager)

LibGDX - Tiled 2D Platform Game

  1. LibGDX: Lifecylce (Render() Method)
  2. LibGDX: Delta Time
  3. LibGDX: Animation & Spritesheet
  4. LibGDX: Keyboard, Mouse & Touch Screen Control
  5. Input Control (Polling VS Event Driven Input)
  6. LibGDX: Tiled (Background and Foreground)
  7. LibGDX: Jumping Action
  8. LibGDX: Tiled (Collision Detection)
  9. LibGDX: Tiled (Bullet Class)
  10. LibGDX: Audio (Sound & Music)
  11. LibGDX: Tiled (Scrollable Background with Camera & HUD)
  12. LibGDX: WorldController & WorldRenderer Class

LibGDX/Java - Card Game No.1 - Blackjack

  1. LibGDX: Install & Setup Android Studio IDE
  2. LibGDX: Use Android Studio to Run Java Hello World
  3. LibGDX: Use Android Studio to Run LibGDX Hello World
  4. Adobe Illustrator: Basic Components Part 1
  5. Adobe Illustrator: Basic Components Part 2
  6. Adobe Illustrator: BlackJack Table & Cards
  7. LibGDX: Blackjack Animation
  8. LibGDX: Interpolation
  9. Java: toString() Method
  10. Java: Blackjack Shuffle Methods
  11. LibGDX: Blackjack Shuffle Method
  12. Java: Blackjack Card Game

LibGDX - Others

  1. Making and Displaying App Icon
  2. LibGDX: Displaying Traditional and Simplified Chinese Characters
  3. LibGDX: Handling Different Screen Resolutions

Unity Game Engine & C#

  1. Visual Studio: C# Hello World
  2. Unity: C# Hello World
  3. Unity: Handling Different Screen Resolutions
  4. Unity: Life Cycle
  5. Unity: StartCoroutine, StopCoroutine, IEnumerator & Yield
  6. Unity: Splash Screen
  7. Unity: Fonts, Traditional and Simplified Chinese Characters
  8. Unity: GameObject, Class Object, new & Instantiate
  9. Unity: Start Screen with Glowing Animated Button
  10. Unity: C# Get & Set Modifier
  11. Unity: Delegates & Events
  12. Unity: File I/O, Read & Write Text File & PlayerPrefs
  13. Unity: Game Level Selection Screen
  14. Unity: Game Menu Screen & ScreenManager
  15. Unity: Encrypt and Decrypt Text File
  16. Unity: Options Menu Screen
  17. Unity: Convert Numbers Image to Custom Font

Unity - Card Game No.1 - Blackjack

  1. Unity: Blackjack Card Game - Part 1 (Full Game)
  2. Unity: Blackjack Card Game - Part 2
  3. Unity: Blackjack Card Game - Part 3
  4. Unity: Blackjack Card Game - Part 4
  5. Unity: Blackjack Card Game - Part 5
  6. Unity: Blackjack Card Game - Part 6
  7. Unity: Blackjack Card Game - Part 7

以下是預告-Coming soon!


Secret Weapon No.1

  1. Unity: Card Game No.2

Advanced Programming

  1. Unity: GPS Programming
  2. Unity: User Login System
  3. Unity: Augmented Reality (AR)

Secret Weapon No.2

  1. Unity: GPS & AR Application

第14節 - Type Casting, Upcasting & Downcasting

這一節我會介紹Type Casting,Type Casting包括Upcasting和Downcasting兩種。

因為Java是一種物件導向程式語言,只要一個子類別(Child)繼承(extends)父類別(Parent),父類別和子類別就有一個Casting的關係。

如果父類別的參考變數(reference variable)不是指向自己的物件,而是指向子類別的物件,這就叫做Upcasting。由於子類別可以視為和父類別相容,UpCasting是沒有問題的。

如果子類別的參考變數(reference variable)不是指向自己的物件,而是指向父類別的物件,這就叫做Downcasting。但在downcasting的情況下, 父類別的reference和子類別並不相容,因此必須使用Casting語法來做強迫轉換。

如下圖:

Type Casting, Upcasting & Downcasting

為甚麼要學Type Casting?

因為Java是一種物件導向程式語言,而Type Casting是物件導向程式語言的一種重要概念,我們必須學習。

但最主要原因是在介紹第17節 - LibGDX: Splash Screen之前,我們要明白Java的Type Casting,這是製作LibGDX的Splash Screen時,其中一個方法須要用到Type Casting的概念。

例子1

Type Casting, Upcasting & Downcasting

Type Casting, Upcasting & Downcasting
  1. 建立一個Class A。
  2. 建立一個Class B,然後繼承(extends)Class A。
  3. 建立一個Class A的Reference Variable a,然後執行a.methodA()方法。
    建立一個Class B的Reference Variable b,然後執行b.methodB()方法。
  4. 執行Run。

例子2

Type Casting, Upcasting & Downcasting

Type Casting, Upcasting & Downcasting
  1. 建立一個Class A。
  2. 建立一個Class B,然後繼承(extends)Class A。
  3. 建立一個Class A的Reference Variable a,然後執行a.methodA()方法。
    建立一個Class B的Reference Variable b,然後執行b.methodB()方法。
    建立一個Class B的Reference Variable b,然後執行b.methodA()方法。
  4. 執行Run。

注意,由於子類別(B)可以視為和父類別(A)相容,所以執行b.methodA()方法是可以的。

例子3 - 多型(Polymorphism) - Method Overriding

Type Casting, Upcasting & Downcasting

Type Casting, Upcasting & Downcasting
  1. 建立一個Class A。
  2. 建立一個Class B,然後繼承(extends)Class A。
  3. 在Class B內建立一個methodA()方法。
    建立一個Class A的Reference Variable a,然後執行a.methodA()方法。
    建立一個Class B的Reference Variable b,然後執行b.methodB()方法。
    建立一個Class B的Reference Variable b,然後執行b.methodA()方法。
  4. 執行Run。

注意,執行b.methodA()方法時,程式會選擇Class B內的methodA()方法,這就叫做Polymorphism - Method Overriding

例子4 - 多型(Polymorphism) - Dynamic Method Dispatch

Type Casting, Upcasting & Downcasting

Type Casting, Upcasting & Downcasting
  1. 建立一個Class A。
  2. 建立一個Class B,然後繼承(extends)Class A。
  3. 建立一個Class A的Reference Variable a,然後把a指向物件b,再執行a.methodA()方法。
  4. 執行Run。

注意,執行a.methodA()方法時,程式會在執行程式時(則動態-Dynamic)選擇Class B內的methodA()方法,這就叫做Polymorphism - Dynamic Method Dispatch

例子5

Type Casting, Upcasting & Downcasting

Type Casting, Upcasting & Downcasting
  1. 建立一個Class A。
  2. 建立一個Class B,然後繼承(extends)Class A。
  3. 建立一個Class A的Reference Variable a,然後執行a.methodB()方法。
    建立一個Class B的Reference Variable b,然後執行b.methodB()方法。
    建立一個Class B的Reference Variable b,然後執行a.methodB()方法。
  4. 執行Run。

注意,由於父類別(A)的reference和子類別(B)並不相容,所以執行a.methodB()方法是不可以的。

例子6 - Casting

要解決例子5不相容的問題,我們可以用Casting語法把a強迫轉換為Class B類別。

Type Casting, Upcasting & Downcasting

Type Casting, Upcasting & Downcasting

注意,以上例子我們產生一個"b",它是B類別的參考變數(Reference Variable),再運行b.methodB(); 但是其實b只會用一次,所以我們可以用匿名(Anonymous )方法,不用"b",直接用((B)a).methodB(); ,如下圖:

Type Casting, Upcasting & Downcasting
  1. 建立一個Class A。
  2. 建立一個Class B,然後繼承(extends)Class A。
  3. 建立一個Class A的Reference Variable a,然後把a指向物件b。
    使用Casting語法把a強迫轉換為Class B類別,然後便可執行a.methodB()方法。
  4. 執行Run。