-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);

意味。

ええと、それはスーパークラスのコンストラクターを呼び出す唯一の方法です。ほとんどの場合、問題のスーパークラスには引数のないコンストラクターがあるため、スーパークラスのコンストラクターの呼び出しは省略できます。しかし、そのようなコンストラクターがない場合、またはいくつかの引数を必要とする別のコンストラクターを呼び出したい場合は、これを使用する必要があります。注:toの呼び出しsuper()は、コンストラクターの最初のステートメントである必要があります。そうしないと、コンストラクターが呼び出されているときにスーパークラスがまだ存在しないため、非常に厄介で予測できない動作が発生する可能性があります。(そして、Javaエンジニアはそれを認識しているので、呼び出しsuper()が遅すぎるか、許可されていないときにそれを省略すると、コンパイル時エラーが発生します。)

于 2012-12-31T14:46:03.347 に答える
0

DBHelperはサブクラスであり、SQLiteOpenHelperはスーパークラスです。DBHelperは、インスタンスの作成時にスーパーコンストラクターを呼び出しています。これを行うには、SQLiteOpenHelperのコンストラクターを使用します。これには、スーパークラスの変数を初期化するためのいくつかのパラメーターが必要です。

于 2012-12-31T14:43:51.220 に答える
0

コードステートメントによると、SQLiteOpenHelperのコンストラクターには4つのパラメーターが必要です。そうでない場合、コンパイル時エラーが発生します。

そしてもちろん、親と子のクラスとスーパークラスのオブジェクト参照に同じ変数がある場合、そのオブジェクトはスーパークラスの変数のみを参照します。

今あなたの疑問が明確であることを願っています!!!

于 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 に答える