Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用构造函数并初始化数据库名称_Java_Android - Fatal编程技术网

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()正在返回正确的结果