Questao 49 testkiller 2003-2004

QUESTAO 49

  1. class Person {
  2. String name = " No name";
  3. public Person (String nm) {name = nm; }
  4. }
  5. class Employee extends Person {
  6. String empID = “0000”;
  7. public Employee(String id) { empID = id; }
  8. }

A resposta indica que tem erro na linha 18… Qual seria esse erro? … nao consigo identificar…
Obrigado

A regra é, o construtor de Employee b[/b] vai fazer sempre uma chamada super(); sem argumentos ao construtor da super-classe, como na super classe já tem um construtor com argumentos ele não va criar um automaticamente, compilaria sem erros se tivesse um construtor sem argumentos na super-classe, ou não tivesse aquele construtor com argumentos public Person (String nm){}, ou construtor de sub-classe b[/b] tivesse uma chamada a super com argumentos super(id);.

Compilaria assim:

[code]class Person {
String name = " No name";
public Person (String nm) {name = nm; }

public Person(){}
}

class Employee extends Person {
String empID = “0000”;
public Employee(String id) {
empID = id; }
} [/code]

ou assim:

[code] class Person {
String name = " No name";
}

class Employee extends Person {
String empID = “0000”;
public Employee(String id) {
empID = id; }
} [/code]

Ou assim:

[code]class Person {
String name = " No name";
public Person (String nm) {name = nm; }
}

class Employee extends Person {
String empID = “0000”;
public Employee(String id) {
super(id);
empID = id; }
} [/code]

A primeira linha de um construtor é SEMPRE uma chamada à super().

Caso você não escreva explicitamente, vai ser posto uma padrão ali que é o super();

Como a sua classe estende uma classe que tem um construtor sobrecarregado, ela deve chamar esse construtor com uma chamada explicita a super(String).

Como voce não sobrecarregou o super na primeira linha do construtor, foi inserido o super() padrão.

Como na classe pai não existe nenhum construtor sem argumentos a classe não compila.

Flw

ok… entendi… Muito Obrigado