java - 调用构造函数并初始化数据库名称

标签 java android

我不明白下面的代码 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_NAMEDATABASE_VERSION 中有两个常量,它们被传递给父构造函数,这意味着 GroceryDBHelper 构造函数不需要它们.构造函数不需要这些变量,因为无论在何处实例化此类,它们都将保持不变。

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

关于java - 调用构造函数并初始化数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57683804/

相关文章:

存储类实现接口(interface)时出现 Java ArrayStoreException

android - mediaPlayer.getCurrentPosition() > mediaPlayer.getDuration() 在播放 mp3 文件结束时

android - 解析推送通知在 Genymotion 中有效,但在真实手机中无效

android - 如何在 zoom android 中应用长按和捏合?

android - recyclerview 定期 ui 子更新

Java继承概念

java - 如何检查给定的字符串是否是一个单词

java - 连接到数据库的方法给出空指针异常

java - 编辑Maven编译的存储库源代码

android - 我如何在 android 中创建一个 Tag 对象?