0

皆さん、私は初心者です。私の目的は、ByteArrayInputStreamからbyte []buf変数を拡張して取得することです。このhttp://www.java2s.com/Open-Source/Android/android-core/platform-libcore/java/io/ByteArrayInputStream.java .htm は、ByteArrayInputStreamに引数なしのコンストラクターがないことを示していますが、コーディングすると次のようになります。

class Test extends ByteArrayInputStream {
    public Test(int i){}
}

eclipseによると:暗黙のスーパーコンストラクターByteArrayInputStream()は未定義です。別のコンストラクターを明示的に呼び出す必要があります。これを尋ねる前に、私はグーグルを検索し、これらを取得しました:Javaエラー:暗黙のスーパーコンストラクターはデフォルトコンストラクターに対して未定義です、それはクラスBがクラスAを拡張する場合、クラスAは引数なしのコンストラクターを定義する必要があることを示します。OK、これは私たちが書いたクラスにとっては簡単ですが、Sunのパッケージのクラスはどうですか...これについても疑問に思います

前もって感謝します。

4

2 に答える 2

2

覚えておくべき 2 つの概念:

  1. デフォルトでは、サブクラスのコンストラクターはスーパークラスの引数なしのコンストラクターを呼び出します。
  2. クラスで定義されたコンストラクターが 1 つでもある場合、jvm は引数なしのコンストラクターを提供しません。

ここで、public Test(int i) は存在しない ByteArrayInputStream() を呼び出します。したがって、Test(int i) の最初のステートメントで、既存の ByteArrayInputStream のコンストラクターを super(required_pa​​rameters); のように呼び出す必要があります。

于 2013-03-15T07:28:59.047 に答える
0

Test クラスには、少なくとも 2 つのコンストラクターが必要です。

public class Test extends ByteArrayInputStream {
    public Test(byte[] buf) {
        super(buf);
    }

    public Test(byte[] buf, int offset, int length) {
        super(buf, offset, length);
    }
}
于 2013-03-15T07:25:46.300 に答える