2012-12-31 57 views
-2

這裏真的很愚蠢的問題。我知道班級和無用功是如何工作的,但我一直在做一些android編程,並且設法讓我自己對超類聲明有點迷惑Java類超級查詢

以下代碼實現了SQLiteOpenHelper類。現在就我而言,這是超級類。發送變量是爲了滿足超類而不是從它繼承嗎?

很顯然,我一直覺得超類引用了超類變量在另一個類中使用。

代碼:

private static class DBHelper extends SQLiteOpenHelper 
{ 
    public DBHelper(Context context) { 
     super(context, KEY_NAME, null, DATABASE_VERSION); 

    } 
+0

什麼是您確切的問題? – Ravi

+0

這裏使用'super'聲明來繼承'SQLiteOpenHelper'類......還是用它來滿足'SQLiteOpenHelper'類所需的變量對象。 – user1352057

回答

0

你延長SQLiteOpenHelper,不執行它,就象您接口。調用super(...),你的確將參數傳遞給超級構造函數。

+0

謝謝你wulfgar!這就是我需要知道的。 – user1352057

0

DBHelper是子類,SQLiteOpenHelper是超類。 DBHelper在創建實例時調用super-Constructor。爲此,使用了SQLiteOpenHelper的構造函數,它需要一些參數來初始化超類中的變量。

0

根據您的代碼統計,SQLiteOpenHelper的構造函數應該有四個參數,否則編譯時錯誤。

當然,如果父類中有相同的變量&子類和超類的對象引用,那麼該對象將只引用超類varibales。

希望現在你的疑惑是明確的!

+0

的確他們是謝謝你Manoj! – user1352057

0

super(context,KEY_NAME,null,DATABASE_VERSION)表示獲取的變量將被用於SQLiteOpenHelper的構造函數。如果你正在擴展這個類,可能需要這些變量才能正確創建它。

在你自己的擴展類的構造函數或方法,就是你做你自己的事,但你似乎知道:P

+0

哈哈!當我最終與其他人一起回答時,我總是感到無聊:P – leenephi

1

當我讀到你的問題 - 這是不是很清楚 - 你有什麼不明白這個:

super(context, KEY_NAME, null, DATABASE_VERSION); 

的意思。

那麼,它是調用超類的構造函數的唯一方法。大多數時候,所討論的超類有一個沒有參數的構造函數,因此可以省略對超類構造函數的調用。但是如果它沒有這樣的構造函數,或者你想調用另一個需要一些參數的構造函數,那麼你需要使用它。注意:調用super()應始終是構造函數中的第一條語句,否則超類將在您的構造函數被調用時不存在,這可能會導致非常令人討厭的非常不可預測的行爲。 (而且Java工程師也知道這一點,所以如果調用super()太遲或在不允許的情況下省略它,則會出現編譯時錯誤。)