mudamos o codigo um pouco:
class Art {
Art(String y) {
System.out.println("Art constructor - String y");
}
Art() {
System.out.println("Art constructor - String");
}
}
class Drawing extends Art {
Drawing(String y) {
super(y);
System.out.println("Drawing constructor - String");
}
Drawing() {
System.out.println("Drawing constructor");
}
}
public class Cartoon extends Drawing {
Cartoon() {
System.out.println("Cartoon constructor");
}
Cartoon(String y)
System.out.println("Cartoon constructor - String y");
}
Cartoon(String y, boolean b) {
super(y);
System.out.println("Cartoon constructor - String y, boolean b");
}
public static void main(String[] args) {
Cartoon x = new Cartoon();
Cartoon y = new Cartoon("");
Cartoon z = new Cartoon("", true);
}
font>
The output will be:
Art constructor
Drawing constructor
Cartoon constructor
O que acontece que quando instantiamos uma classe, a super classe deve ser instanciado tb. Normalmente a subclasse instanciará a superclasse com o construtor Padrao. (Exemplo 2). Se quesermos que uma outra contructo é chamado precisamos chamar o contrutor usando super(lista_de_parametros)Art constructor
Drawing constructor
Cartoon constructor - String yArt constructor - String y
Drawing constructor - String y
Cartoon constructor - String y, boolean b
Airton wrote:
004b01c16300$5e21ae60$[EMAIL PROTECTED]">Olá.
Entendi pelo trecho abaixo do The Java Tutorial, que construtores não podem ser herdados:What Members Does a Subclass Inherit?
Rule: A subclass inherits all of the members in its superclass that are accessible to that subclass unless the subclass explicitly hides a member variable or overrides a method. Note that constructors are not members and are not inherited by subclasses.O trecho a seguir faz parte do capítulo 6 do livro Thinking in Jana, 2nd edition, Revision 12 de Bruce Eckel, mostrando que os construtores são herdados das classes bases, até mesmo se vc não criar um (ver última linha do trecho):Java automatically inserts calls to the base-class constructor in the derived-class constructor. The following example shows this working with three levels of inheritance:
//: c06:Cartoon.java
// Constructor calls during inheritance.
class Art {
Art() {
System.out.println("Art constructor");
}
}
class Drawing extends Art {
Drawing() {
System.out.println("Drawing constructor");
}
}
public class Cartoon extends Drawing {
Cartoon() {
System.out.println("Cartoon constructor");
}
public static void main(String[] args) {
Cartoon x = new Cartoon();
}
} ///:~The output for this program shows the automatic calls:
Art constructor
Drawing constructor
Cartoon constructorYou can see that the construction happens from the base “outward,” so the base class is initialized before the derived-class constructors can access it. [ Add Comment ]
Even if you don’t create a constructor for Cartoon( ), the compiler will synthesize a default constructor for you that calls the base class constructor. [ Add Comment ]
O que entendi errado? É interessante colocar os membros da super classe a ser herdada nos construtores ou é melhor evitar? Por quê?
Obrigado,
Airton
