首页 > 解决方案 > 调用构造函数并初始化数据库名称

问题描述

我不明白以下代码片段是如何工作的:

public class GroceryDBHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "grocerylist.db";
    public static final int DATABASE_VERSION = 1;

    public GroceryDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
}

即:首先,继承自SQLiteOpenHelper类应该调用构造函数,与该类的构造函数相同。在这种情况下,构造函数只接受上下文变量。但仍然可以正常工作。

其次:我的类继承自 SQLiteOpenHelper 类。在 SQLiteOpenHelper 类中,成员变量是私有的,所以它们不会被我的类继承。所以我没有负责数据库名称的成员变量。另外,我之前给出的构造函数没有初始化数据库名称,但是当我使用方法dbHelper.getDatabaseName(); 时,我实际上得到了正确的数据库名称。这是怎么回事?

标签: javaandroid

解决方案


这一行:super(context, DATABASE_NAME, null, DATABASE_VERSION);正在调用父类的构造函数SQLiteOpenHelper

您的类中有两个常量DATABASE_NAMEDATABASE_VERSION它们被传递给父构造函数,这意味着构造函数不需要它们GroceryDBHelper。构造函数不需要这些变量,因为无论在何处实例化此类,它们都将保持不变。

SQLiteOpenHelper当您通过super()调用 将这些变量传递给时,SQLiteOpenHelper正在设置私有成员,这就是dbHelper.getDatabaseName();返回正确结果的原因。


推荐阅读