Why default constructor is required(explicitly) in a parent class if it
has an argumented constructor
Non necessariamente!
Ora nella classe B
class B extends A {
}
non hanno fornito alcuna costruzione della classe B in modo da un costruttore di default sarà posto. Ora è una regola che ogni costruttore deve chiamare uno dei suoi costruttori di super classi.Nel tuo caso il costruttore predefinito in Classe B proverà a chiamare il costruttore predefinito in classe A (è genitore), ma come non hai un costruttore predefinito in Classe A (come hai esplicitamente fornito un costruttore con argomenti in classe A non hai un costruttore predefinito in Classe A) riceverai un errore.
cosa che si potrebbe fare è
O non forniscono argomenti di costruzione della classe A.
A()
{
//no arg default constructor in Class A
}
O
esplicitamente scrivere senza args costruttore in B e chiamare il super-con qualche argomento int di default.
B()
{
super(defaultIntValue);
}
linea di fondo è che per un oggetto da creare completamente i costruttori di ciascun genitore nella gerarchia di ereditarietà devono essere chiamati. Quelli da chiamare sono davvero la tua scelta di design. Ma nel caso in cui non fornisci esplicitamente alcun java, chiamerai il costruttore predefinito super() come 1a riga di ognuno dei tuoi costruttori sub class e ora, se non lo hai in superclasse, otterrai un errore.
fonte
2013-09-12 14:14:10
@ user358099: per chiarire che stava cercando di chiamare il supercostruttore senza parametri. –