天天看點

《Android遊戲開發詳解》——第2章,第2.15節改程序式

本節書摘來自異步社群《android遊戲開發詳解》一書中的第2章,第2.15節改程序式,作者 【美】jonathan s. harbour,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

2.15 改程序式

android遊戲開發詳解

讓我們記住上面的原理,并且努力地改程序式。首先,添加一個内建的java關鍵字private作為所有phone對象的變量的修飾符,如程式清單2.14第4行到第7行所示。

程式清單2.14 隐藏phone類中的變量

讓變量成為private的,意味着其他的類不再能夠直接通路它們,也意味着這些變量不再是暴露的了。是以,你将會看到world類中出現錯誤,如圖2-21所示(不能直接引用不同的類中的一個private的變量)。

程式目前有所謂的編譯時錯誤(發生在代碼編譯過程中的錯誤,參見圖2-18以及後續的介紹)。有編譯時錯誤的程式無法運作。jvm甚至不會接受這種程式。讓我們删除引發錯誤的所有代碼行,如程式清單2.15所示(在删除的所有代碼行上,都有一條删除線)。

《Android遊戲開發詳解》——第2章,第2.15節改程式式

要執行這一清理工作,我們必須删除程式的兩項功能。我們不再能夠為phone對象的變量賦初始值,并且不再能夠通路這些變量以列印出它們。我們可以通過在phone類中提供方法來執行這些任務,進而以更高效的方式來實作這些功能。

讓我們給phone類添加兩個新的方法:initialize()和describe(),如程式清單2.16所示,并且為playingmusic和androidversionnumber變量提供初始值(如程式清單2.16的第5行和第7行所示)。

程式清單2.16 phone.java——更新版本(新的代碼行突出顯示)

讓我們讨論一下describe()方法(程式清單2.16的第40行到第46行)。你注意到,它執行了我們前面在world類中所執行的相同的列印行為。這一次,我們不必使用點運算符,因為可以從同一個類中通路這些變量。

然而,在某些情況下,你确實需要使用點運算符。來進一步看一下initialize()方法(程式清單2.16的第10行到第13行)。

initialize()方法直接接受兩個輸入:一個名為poweredon的boolean值,以及一個名為phonemanufacturer的字元串。這個方法唯一的功能就是,将我們沒有為其提供預設值的兩個變量poweredon和phonemanufacturer(還記得吧,我們已經為另外兩個變量提供了初始值)初始化。如圖2-22所示。

注意,我們在這裡确實使用了點運算符。使用this關鍵字讓程式知道,我們引用的是對象的這個執行個體,即我們在其上調用initialize()方法的目前phone對象。這就是我們如何區分屬于對象的poweredon變量和屬于方法(通過參數而接受)的poweredon變量。

既然已經建立了兩個方法,我們就能夠通路phone對象的私有變量,讓我們來修改world類,以便它可以調用這些方法,參見程式清單2.17中高亮顯示的第6行、第7行和第10行。

《Android遊戲開發詳解》——第2章,第2.15節改程式式

程式清單2.17 world.java——調用新的方法

相應的輸出如下所示。

繼續閱讀