-2

这里真的很愚蠢的问题。我知道类和继承是如何工作的,但我一直在做一些android编程,并设法让自己对超类声明有点困惑

以下代码实现了SQLiteOpenHelper该类。现在就我而言,这是超级类。发送变量是为了满足超类而不是从它继承吗?

显然,我总是认为超类引用了超类变量以在另一个类中使用。

代码:

private static class DBHelper extends SQLiteOpenHelper
{
    public DBHelper(Context context) {
        super(context, KEY_NAME, null, DATABASE_VERSION);

    }
4

5 回答 5

1

当我阅读您的问题时-不是很清楚-您不明白这是什么:

super(context, KEY_NAME, null, DATABASE_VERSION);

方法。

好吧,这是调用超类的构造函数的唯一方法。大多数时候,所讨论的超类有一个没有参数的构造函数,因此可以省略对超类的构造函数的调用。但是如果它没有这样的构造函数,或者你想调用另一个需要一些参数的构造函数,你需要使用它。注意:调用super()应该始终是构造函数中的第一条语句,否则在调用构造函数时超类将不存在,这可能导致非常讨厌、非常不可预测的行为。(Java 工程师也意识到了这一点,因此调用super()太晚或在不允许时忽略它会导致编译时错误。)

于 2012-12-31T14:46:03.347 回答
0

根据您的代码声明,SQLiteOpenHelper 的构造函数应该有四个参数,否则编译时错误。

当然,如果父类和子类中存在相同的变量以及超类的对象引用,那么该对象将仅引用超类变量。

希望现在你的疑虑是清楚的!

于 2012-12-31T14:44:53.777 回答
0

super(context, KEY_NAME, null, DATABASE_VERSION) 表示传入的变量将用于 SQLiteOpenHelper 的构造函数。如果您正在扩展该类,则可能需要这些变量才能正确创建它。

在您自己的扩展类构造函数或方法中,您可以做自己的事情,但您似乎知道:P

于 2012-12-31T14:45:25.233 回答
0

您正在扩展SQLiteOpenHelper,而不是像接口那样实现它。调用super(...),您确实将参数传递给了超级构造函数。

于 2012-12-31T14:43:12.373 回答
0

DBHelper 是子类,SQLiteOpenHelper 是超类。DBHelper 在创建实例时调用超级构造函数。为此,使用了 SQLiteOpenHelper 的构造函数,它需要一些参数来初始化超类中的变量。

于 2012-12-31T14:43:51.220 回答