2013-03-15 3 views
0

все, я новичок. Моя цель состоит в том, чтобы получить байты [] Buf переменным из ByteArrayInputStream пути расширяет его, в этом http://www.java2s.com/Open-Source/Android/android-core/platform-libcore/java/io/ByteArrayInputStream.java.htm говорит, что ByteArrayInputStream не имеет никакого-арг конструктора, но когда я код:Java ByteArrayInputStream Неявный супер конструктор не определен. Должен явно ссылаться на другой конструктор

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

затмение говорит мне: Неявное супер конструктор ByteArrayInputStream() не определен. Необходимо явно вызвать другой конструктор. Прежде чем спросить об этом, я искал google, затем получил следующее: Java error: Implicit super constructor is undefined for default constructor, он сообщает, что если класс B расширяет класс A, тогда класс A должен определить конструктор no-args. Хорошо, это легко для классов, которые мы написали, но как насчет классов из пакета Sun ... Интересно об этом тоже

Заранее спасибо.

ответ

0

Ваш класс Тест должен иметь как минимум два конструктора:

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

    public Test(byte[] buf, int offset, int length) { 
     super(buf, offset, length); 
    } 
} 
2

два понятия, чтобы помнить:

  1. по умолчанию, любой подкласс конструктор не вызывает конструктор без аргументов из суперкласса.
  2. Если в классе определен только один конструктор, jvm не предоставляет конструктор no-arg.

здесь, public Test (int i) вызовет ByteArrayInputStream(), которого не существует. Поэтому u должен вызывать любой существующий конструктор ByteArrayInputStream в первом тесте Test (int i), как и super (required_parameters);