Pessoal, ontem estudando, fiz umas classes aki e obtive problemas com o construtor e fiquei por entender:
[code]public class Veiculo{
int qtdeRodas;
public Veiculo(int a){
qtdeRodas = a;
}
}
public class Siena extends Veiculo{
int qtdeportas;
public void comprar{
System.out.println("Vc acaba de adquirir um Siena");
}
}[/code]
Quando as compilo (tendo uma 3ª classe com main), me dá um erro de construtor (eu nao tenho o erro aki correto, pq neste computador eu não tenho java).
O que pode ser isso?
Aproveito para perguntar: o que é um arquivo .classpath? e .project?
Arquivos .classpath e .project são gerados pelo Eclipse pra guardar configurações do seu projeto.
O erro provalmente é pq qdo vc vai instanciar o seu objeto Siena, você deve estar usando uma sintaxe do tipo: Siena siena = new Siena()
Isso vai gerar uma chamada para o construtor do classe pai (Veiculo) com os mesmos parâmetros (no caso nenhum). Porém esse construtor sem parâmetros não existe na classe pai (ele só é criado implicitamente qdo não há NENHUM construtor declarado na classe). Você tem duas soluções, crie um construtor sem parâmetros na classe veículo que não faça nada. Ou então na sua classe Siena coloque uma chamada para super(int a).
Sem o erro e sem o código da terceira classe com o main fica dificil te ajudar…
Mas quanto ao .classpath e ao .project, são arquivos que o eclipse gera. o .classpath é como se fosse o classpath da maquina, ja que o eclipse não utiliza o classpath da maquina, só o que ele cria para cada projeto…
O erro ocorre porque vc definiu um construtor na class Veiculo que recebe um parâmetro int a e na class Siena derivada de Veiculo, vc não definiu um construtor, sendo assim a JVM chama o construtor da super classe de Siena e como o único construtor definido recebe um int de rodas vai gerar uma exceção.
O Souza falou bem. Quando se define um construtor com um ou mais parâmetros, não se pode instanciar um objeto dessa classe com o construtor default, ao menos que ele esteja explicitado no código. Quando, no construtor de Siena, ocorre a chamada ao construtor de Veículo, resultará em um erro de compilação. Se, em uma subclasse, dentro de seu construtor, não houver uma referência ao construtor da superclasse ( via referência “super” ), a JVM chama o construtor padrão sem parâmetros da superclasse, que, nesse caso, não pode acontecer, haja vista a não declaração dele no código, por causa do outro construtor declarado.
Inclua no seu código, em veículo, um construtor default, ou dentro de Siena chame o construtor da superclasse ( super(rodas); )
Ele poderia ser assim:
public class Siena extends Veiculo
{
public Siena( int rodas, int portas )
{
super(rodas);
qntdPortas = portas;
}
}
aconte o seguinte sua subclass Siena extends da classe pai, e nessa class o construtor nao eh padrao, entao qdo vc extends vc herda tudo da classe pai, mas lembrando construtores nao sao herdados sao sobrecarregados e isso a subclass nao faz… faça isso na sub: