我不明白下面的代码 fragment 是如何工作的:
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类中,成员变量是私有(private)的,所以不被我的类继承。所以我没有负责数据库名称的成员变量。
另外我之前给出的构造函数没有初始化数据库名称,但是当我使用方法 dbHelper.getDatabaseName();
我实际上得到了正确的数据库名称。这是怎么回事?
最佳答案
这一行:super(context, DATABASE_NAME, null, DATABASE_VERSION);
正在调用父类 SQLiteOpenHelper
的构造函数。
您的类 DATABASE_NAME
和 DATABASE_VERSION
中有两个常量,它们被传递给父构造函数,这意味着 GroceryDBHelper
构造函数不需要它们.构造函数不需要这些变量,因为无论在何处实例化此类,它们都将保持不变。
当您通过 super()
调用将这些变量传递给 SQLiteOpenHelper
时,SQLiteOpenHelper
正在设置私有(private)成员,这就是为什么 dbHelper.getDatabaseName();
正在返回正确的结果。
关于java - 调用构造函数并初始化数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57683804/