Java 调用构造函数并初始化数据库名称
我不明白下面的代码片段是如何工作的:Java 调用构造函数并初始化数据库名称,java,android,Java,Android,我不明白下面的代码片段是如何工作的: public class GroceryDBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "grocerylist.db"; public static final int DATABASE_VERSION = 1; public GroceryDBHelper(Context context) { supe
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()时初始化代码>
我实际上得到了正确的数据库名称。这是怎么发生的?这一行:super(上下文、数据库名称、null、数据库版本)
正在调用父类的构造函数SQLiteOpenHelper
类中有两个常量DATABASE\u NAME
和DATABASE\u VERSION
,它们被传递给父构造函数,这意味着GroceryDBHelper
构造函数不需要它们。构造函数不需要这些变量,因为无论该类在何处实例化,它们都将保持不变
当您通过super()
调用将这些变量传递给SQLiteOpenHelper
时,SQLiteOpenHelper
正在设置私有成员,这就是为什么dbHelper.getDatabaseName()代码>正在返回正确的结果