Construtor

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?

Já tá definido a: “int qtdeportas;”
Na Classe Veículos, não precisas redefinir na Classe Siena pois, ele está estendida à Veiculos.

Acertei? =)

Seria melhor se voce conseguisse nos dizer o erro que está recebendo.

O único erro que consegui ver no seu código não tem a ver com o construtor.
Está na linha:

public void comprar{

Quando você declara um método, mesmo que ele não receba parâmetros, precisa ter os ()

corrija assim:

public void comprar() {

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…

É isso mesmo pafuncio, muito obrigado!
Fica difícil mesmo, mas é pq como disse não tenho Java aki, mas valeu!

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.

gilberto.souza foi perfeito na explicação é isso mesmo e deve-se tb consertar o erro no método

método comprar tem um erro tb

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; } }

Espero ter ajudado!

ajudou sim, valeu galera!

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:


Siena(int z){}

ai vc sobrecarrega o construtor da super class…