2013-12-17 58 views
0

我不明白這個規則。一年前,我從C#書中學習OOP。所以,我學習了C#OOP。當我編程java時,瞭解java代碼花費很少。但是,當我移動到Android。我發現一些奇怪的東西。像classname.this,object.this,它的參數是interface的構造函數。我認爲android並不容易,如果我遇到問題,在stackoverflow中從來沒有問過問題,我想我會死的。因爲,我無法理解android庫(android庫文檔)中的所有方法。當我閱讀文檔時,我只瞭解所有方法中的幾個,我理解許多方法的定義。但是當我嘗試理解方法的參數時,我總是困惑不解。Android - 困惑Android OOP

我想問。 。 。

爲什麼這是正確的:

final EditText textBoxSearch = (EditText) findViewById(R.id.textbox_search); 
    textBoxSearch.setVisibility(EditText.GONE); 

爲什麼這是不對的:

textBoxSearch.setVisibility(textBoxSearch.GONE); 
+4

'GONE'是一個靜態變量,而不是一個實例變量,所以你需要做'class.GONE'。它來自['View'](http://developer.android.com/reference/android/view/View.html#GONE),它是'EditText'的子類。它與[Java中的靜態變量]相同(http://www.caveofprogramming.com/frontpage/articles/java/java-for-beginners-static-variables-what-are-they/)。 – thegrinner

+0

- 因爲「不正確」有點複雜。說出你得到了什麼樣的錯誤。 –

+0

@thegrinner我認爲你必須回答沒有評論 – AndikaK

回答

3

GONE是一個靜態變量,而不是一個實例變量,所以你需要做class.GONE。它來自View,其中EditText的子類。

基本上,它屬於的類而非實例

這是相同的行爲static variables in Java

有時候,你想有一個適用於所有對象的變量。這是通過靜態修改器完成的。在其聲明中具有靜態修飾符的字段稱爲靜態字段或類變量。他們與班級相關,而不是與任何對象相關聯。該類的每個實例共享一個類變量,它位於內存中的一個固定位置。任何對象都可以更改類變量的值,但也可以在不創建類的實例的情況下操作類變量。

類變量由類名本身引用[...]。

0

我是那種你相反的......我第一次學習Java和只知道一點C#。但據我所知,這兩者之間非常相似。

EditText.GONE是一個靜態最終變量(就像C中的const)。

一個簡單的想法是,對於每一個類,你都可以從中實例化所有的實例,但是你也有一個獨立的類對象,這個對象就是所有的靜態變量和方法。

+0

我的書不好 – AndikaK

+0

我推薦閱讀官方教程。這就是我開始使用Java的方式。 http://docs.oracle.com/javase/tutorial/java/index。html – Tenfour04

+0

我認爲「錯誤」的方式仍然有效,編譯器只是給你一個警告,因爲「錯誤」的方式可能表明你意外地做了你不打算做的事情。我認爲這與C#中的const的工作方式相同,只是編譯器不會提醒你。 – Tenfour04