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

第25節 - Java & LibGDX: super keyword

這一節我會介紹Java的一個保留字(keyword) "super",super保留字可以用來呼叫父類別的成員。

因為Java是一種物件導向程式語言,只要一個子類別(Son)繼承(inheritance- extends)父類別(Parent),子類別就可以用父類別的成員(例如父類別的方法)。

為甚麼要學Java的保留字super?

最主要原因是因為在寫LibGDX遊戲過程中,我們會常常遇到super保留字。

第一次在本網站出現super應該是第15節 - @Override的用法和意思,大家可以在下圖發現所有resize(), render(), pause(), resume()和dispose()方法內都會用到super,我會在這一節詳細介紹。

Java super  keyword


以下會用幾個簡單例子一步一步解釋super的用法:

Java: 例子1

首先在Eclipse建立一個MyDemo25 project,再建立第1個Class(MyDemo25_1),我們建立一個父類別(Parent)和一個子類別(Son),把子類別(Son)繼承(extends)父類別(Parent),Son物件(s)就可以用Parent類別的methodP1()方法,如下圖:

Java super  keyword
  1. 建立一個父類別(Parent),再建立一個methodP1()方法。

  2. 建立一個子類別(Son),再建立一個methodS1()方法。

  3. 執行程式:
    s.methodP1()呼叫Parent類別內的methodP1()方法。
    s.methodS1()呼叫自己Son類別內的methodS1()方法。


Java: 例子2

在Son類別內覆蓋methodP1()方法,如下圖:

Java super  keyword
  1. 建立一個父類別(Parent),再建立一個methodP1()方法。

  2. 建立一個子類別(Son),再建立一個methodS1()方法。

  3. 再在子類別(Son)內建立一個methodP1()方法。

  4. 執行程式:
    s.methodP1()呼叫自己Son類別內的methodP1()方法。
    s.methodS1()呼叫自己Son類別內的methodS1()方法。


    注意,我在第14節 - Type Casting, Upcasting & Downcasting介紹過,執行s.methodP1()方法時,程式會選擇Son類別內的methodP1()方法,這就叫做Polymorphism - Method Overriding

Java: 例子3

在Son類別的methodS1()方法內用super.methodP1()呼叫Parent類別內的methodP1()方法,如下圖:。

Java super  keyword
  1. 建立一個父類別(Parent),再建立一個methodP1()方法。

  2. 建立一個子類別(Son),再建立一個methodS1()方法。

  3. 再在子類別(Son)內建立一個methodP1()方法,在methodP1()方法內用super.methodP1()呼叫Parent類別內的methodP1()方法。

    注意,在Son的methodP1()方法內,大家除了可以用super.methodP1()呼叫Parent類別內的methodP1()方法外,還可以加入自己須要的程式,這也是很多程式又要覆寫子類別方法,又要加入自己須要的程式的原因。

  4. 執行程式:
    s.methodP1()呼叫自己Son類別內的methodP1()方法。
    s.methodS1()呼叫Parent類別內的methodP1()方法,再呼叫自己Son類別內的methodS1()方法。

Java: 例子4

這次把父類別(Parent)轉為抽象類別(Abstract Class),我在第23節 - LibGDX: Advanced Game Menu Screen (Using Abstract Screen)介紹過抽象類別的方法,在Parent抽象類別內建立一個抽象方法methodP1(),再在Son類別內定義methodP1()方法內容,如下圖:。

Java super  keyword
  1. 把父類別(Parent)轉為抽象類別(Abstract Class),再建立一個methodP1()抽象方法。

  2. 建立一個子類別(Son),再建立一個methodS1()方法。

  3. 再在Son類別內定義methodP1()方法內容。

  4. 執行程式:
    s.methodP1()呼叫自己Son類別內的methodP1()方法。
    s.methodS1()呼叫自己Son類別內的methodS1()方法。

Java: 例子5

這次再加入祖父抽象類別(Grandparent),在Grandparent抽象類別內建立一個抽象方法methodG1(),再在Parent類別內定義methodG1()方法內容,再在Son類別內覆寫methodG1()方法內容,如下圖:

Java super  keyword
  1. 加入祖父抽象類別(Grandparent),在Grandparent抽象類別內建立一個抽象方法methodG1()。

  2. 建立一個父類別(Parent),再在Parent類別內定義methodG1()方法內容。

  3. 建立一個子類別(Son),再建立一個methodS1()方法。

  4. 再在Son類別內覆寫methodG1()方法內容。

  5. 執行程式:
    s.methodG1()呼叫自己Son類別內的methodG1()方法。

Java: 例子6

在Son類別的methodG1()方法內用super.methodG1()呼叫Parent類別內的methodG1()方法,如下圖:

Java super  keyword
  1. 加入祖父抽象類別(Grandparent),在Grandparent抽象類別內建立一個抽象方法methodG1()。

  2. 建立一個父類別(Parent),再在Parent類別內定義methodG1()方法內容。

  3. 建立一個子類別(Son),再覆寫methodG1()方法內容,在methodG1()方法內用super.methodG1()呼叫Parent類別內的methodG1()方法。

  4. 執行程式:
    s.methodG1()呼叫Parent類別內的methodG1()方法。

Java: 例子7

例子7和例子6相似,我們只把Son類別內的methodG1()方法刪除,s.methodG1()就會呼叫Parent類別內的methodG1()方法,如下圖:

Java super  keyword
  1. 加入祖父抽象類別(Grandparent),在Grandparent抽象類別內建立一個抽象方法methodG1()。

  2. 建立一個父類別(Parent),再在Parent類別內定義methodG1()方法內容。

  3. 建立一個子類別(Son),刪除methodG1()方法。

  4. 執行程式:
    s.methodG1()呼叫Parent類別內的methodG1()方法。

Java: 例子8

這個例子就是最多人出錯的一個,與例子6和例子7相似,在Son類別內有覆寫methodG1()方法,但沒有提供內容或super.methodG1(),雖然程式可以執行,但結果就會出錯,如下圖:

Java super  keyword
  1. 加入祖父抽象類別(Grandparent),在Grandparent抽象類別內建立一個抽象方法methodG1()。

  2. 建立一個父類別(Parent),再在Parent類別內定義methodG1()方法內容。

  3. 建立一個子類別(Son),覆寫methodG1()方法,但不提供內容或super.methodG1()。

  4. 執行程式:
    結果空白。

LibGDX: 例子1

大家看完以上八個Java例子,把以上學到的用在LibGDX上,其實它們的關係如下:

  1. Grandparent=ApplicationListener
  2. Parent=Game
  3. Son=MyDemo25
Java super  keyword
  1. 把menuscreen.png和splashscreen.png傳入Android/assets/內。

  2. DesktopLauncher是PC Desktop的Starter Class,我們在DesktopLauncher內設定顯示的大小為459x600px。

Java super  keyword
  1. 這個Game2類別是複製LibGDX官方的Game類別,因為我會在LibGDX - 例子2內嘗試更改內容,大家請注意。

  2. 把LibGDX官方的Game類別內容複製到Game2類別內。

Java super  keyword
  1. 把MyDemo25_9 extends Game2 (不是Game!)。

  2. 只覆寫Game2類別的create()方法,其他不理會 (這個就是以上介紹的Java例子7)

Java super  keyword
  1. Game2 (不是Game!)傳入SplashScreen的話Constructor內。

  2. 注意,因為SplashScreen是實作Screen介面,而不是繼承Game抽象類別,在Screen介面內的show(), render(), resize(), pause(), resume()和hide()都沒有定義內容,而Game抽象類別內除了create()方法沒有定義內容外,其他都定義了內容。

    所以就算SplashScreen實作Screen介面,只要覆寫show(), render(), resize(), pause(), resume()和hide()方法,而內容可以空白或設計自己須要的程式。

Java super  keyword
  1. MenuScreen和SplashScreen一樣,只要覆寫show(), render(), resize(), pause(), resume()和hide()方法,而內容可以空白或設計自己須要的程式。。

LibGDX: 例子2

這個例子嘗試更改Game2抽象類別的內容,把render()方法內的內容刪除,如下圖:

Java super  keyword
  1. 更改Game2抽象類別的內容,把render()方法內的內容刪除。

因為沒有了預設的screen.render()方法,所以屏幕顯示黑色,如下圖:

Java super  keyword

LibGDX: 例子3

這個例子嘗試把Game2抽象類別內的內容複製到MyDemo25_9類別內,如下圖:

Java super  keyword
  1. 把Game2抽象類別內的內容複製到MyDemo25_9類別內(這個就是以上介紹的Java例子5)。。

LibGDX: 例子4

這個例子嘗試把Game2抽象類別內的內容更改為super,如下圖:

Java super  keyword
  1. 更改為super後,就會呼叫Game2抽象類別內的方法(這個就是以上介紹的Java例子6)

LibGDX: 例子5

Java super  keyword
  1. 這個例子就是最多人出錯的一個,覆寫Game2抽象類別內的方法,但不提供內容或super(這個就是以上介紹的Java例子8)

LibGDX: 總結

  1. 例子1,3和4是正確的。

  2. 例子2是錯誤的,因為我固意更改LibGDX Game 類別官方內容。

  3. 例子5就是最多人出錯的一個,因為覆寫Game抽象類別內的方法,但不提供內容或super。
Java super  keyword