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必须定义一个无参数构造函数。好的,这对于我们编写的类来说很容易,但是 Sun 包中的类呢……我也想知道这个

提前致谢。

4

2 回答 2

2

要记住的两个概念:

  1. 默认情况下,任何子类构造函数都会调用超类的无参数构造函数。
  2. 如果一个类中甚至定义了一个构造函数,jvm 不提供无参数构造函数。

在这里,public Test(int i) 将调用不存在的 ByteArrayInputStream()。所以你必须在 Test(int i) 的第一条语句中调用任何现有的 ByteArrayInputStream 构造函数,就像 super(required_pa​​rameters);

于 2013-03-15T07:28:59.047 回答
0

您的 Test 类应该至少有两个构造函数:

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 回答