public static void main(String[] args) {
int op;
Veiculo v = null;
Scanner scn = new Scanner(System.in);
for (;;) {
op = menu();
if (op == 1) {
System.out.print("Informe a cilindrada: ");
v = new Moto(scn.nextInt()); // Não entendi essa parte, pq eu tenho q passar isso dentro do contrutor,
} // e se eu fazer isso = v = new Moto(), v.setMarca não funciona ???
else if (op == 2) {
System.out.print("Informe o nº de portas: ");
v = new Carro(scn.nextInt());
}
else if (op == 3) {
System.out.print("Informe o nº de eixos: ");
v = new Caminhao(scn.nextInt());
}
else break;
System.out.print("Informe marca: ");
v.setMarca(scn.next());
System.out.print("Informe placa: ");
v.setPlaca(scn.next());
System.out.print("Informe cor: ");
v.setCor(scn.nextInt());
v.calculaPedagio();
System.out.printf("R$ %.2f\n\n", v.getValor());
}
}
}
nextInt, pede para vc ler um int… um inteiro, um numero…
cade o construtor?
[quote]
e se eu fazer isso = v = new Moto()[/quote]
é para um construtor vazio, padrao. inicializa um objeto novo, de moto, sem parametros
o setMarca é independente , só que o v está sendo usado para marca e moto…
mais ou menos isso aí… tem que ver o código todo … no mais…
ajudei? que deu?
Fica difícil ajudar sem a definição da classe Moto…
mas aqui vai o que sei a respeito dos métodos da classe Scanner:
nextInt() retorna o inteiro digitado pelo usuário.
nextFloat() retorna o float digitado
(…) e assim para todo tipo primitivo
next() retorna uma String com tudo o que foi digitado pelo usuário até ele apertar enter
Note que é necessário usar um try/catch pra garantir que o usuário realmente digitou um inteiro quando você usou um nextInt() e assim por diante.
No caso o seu código tá dizendo que um dos construtores da classe Moto tem como parâmetro a cilindrada da moto, que é do tipo inteiro.
E setMarca() não deixa de funcionar por causa disso.
CLASSE MOTO
public class Moto extends Veiculo {
private int cilindrada;
public Moto(int cilindrada) {
this.cilindrada = cilindrada;
}
@Override
public void calculaPedagio() {
valor = 2.1F;
}
}
CLASSE VEICULO
public abstract class Veiculo {
protected String marca, placa;
protected int cor;
protected float valor;
public void setMarca(String marca) {
this.marca = marca;
}
public void setPlaca(String placa) {
this.placa = placa;
}
public void setCor(int cor) {
this.cor = cor;
}
public float getValor() {
return valor;
}
public String getMarca() {
return marca;
}
public String getPlaca() {
return placa;
}
public int getCor() {
return cor;
}
public abstract void calculaPedagio();
}
Esse programa está fazendo polimorfismo, e é abstract…
Quando eu tento instanciar a classe Veiculo, ele não deixa…
Ok, o construtor da classe moto só permite que você instancie passando uma cilindrada (que é um inteiro)
e no seu código está usando
v = new Moto(scn.nextInt());
que é um objeto da classe Scanner utilizando o método nextInt() que retorna o inteiro digitado pelo usuário.
Não tem a ver com string no caso, e não há motivos para o método setMarca() parar de funcionar.
setMarca() continua funcionando porque é um método que vem lá da classe Veiculo, e modifica um atributo protected
da própria.
Quanto à classe ser abstrata, a pessoa que criou o código decidiu que não faz sentido um objeto dessa classe
existir, mas sim apenas suas filhas (no caso Moto).
Let me know if that helped you
=]