Dúvida:: Sobreescrita métodos e herança!

Gente realmente estou com muita dúvida em realizar heranças e sobrescrita de métodos… ao fazer esse código bati cabeça me soquei fiz de tudo mais continuo com dúvida. alguem poderia me ajudar, o objeto foi criar a super classe Carro e as sub-classes CarroAutomatico e Carro Manual.

Qual seria a forma correta, peço por favor ajuda pq estou quebrando cabeça!

A dúvida é: Se eu criasse velocidade e cambio na classe pai, ao encapsular, como eu iria fazer essa linha nas sub-classes:
this.velocidade += velocidadeAumentada;

Segue o código:

[code]
public class Carro{
private String cor;
private int portas;

public Carro(String cor, int portas){
	this.cor = cor;
	this.portas = portas;      
}

public void Acelerar(){
	
}

}

//--------------

public class CarroManual extends Carro{
private int velocidade = 0;
private int cambio = 0;

public CarroManual(String cor, int portas) {
	super(cor, portas);
}

public void Acelerar(int velocidadeAumentada, int cambio){
	this.cambio = cambio;
	this.velocidade += velocidadeAumentada;

	if (this.velocidade <= 50 && this.cambio == 1){
		System.out.println("Sucesso!");
	}
	else {
		System.out.println("Falhou!");	
	}
}	

public String toString(){
	return "A velocidade é "+this.velocidade+" e a marcha atual é "+this.cambio+"";
}

}

//-----------------------------

public class CarroAutomatico extends Carro{
private int velocidade = 0;
private int cambio = 0;

public CarroAutomatico(String cor, int portas) {
	super(cor, portas);
}

public void Acelerar(int velocidadeAumentada){
	this.cambio = cambio;
	this.velocidade += velocidadeAumentada;

	if (this.velocidade <= 50){
		this.cambio++;
		System.out.println("Sucesso!");
	}
}		

public String toString(){
	return "A velocidade é "+this.velocidade+" e a marcha atual é "+this.cambio+"";
}

}[/code]

Você só esqueceu de dizer uma coisa: qual dúvida? :lol:

A princípio só vejo um problema:

 public class Carro{  
     private String cor;  
     private int portas;  
 public String toString(){  
         return "A velocidade é "+this.velocidade+" e a marcha atual é "+this.cambio+"";  
     }

vc não conseguirá acessar velocidade no toString() pq ela foi declarada como private na classe pai.

Você tem duas opções:
:arrow: Muda a classe Carro para

 public class Carro{  
     protected String cor;  
     protected int portas;  

:arrow: Ou, melhor ainda, cria os métodos getVelocidade() e getCambio() na classe Carro e faz assim no toString()

 public String toString(){  
         return "A velocidade é "+getVelocidade() +" e a marcha atual é "+getCambio();  
     }

ok?

Vou conseguir sim velocidade e cambio foi declarado nas sub-classes.

Se eu criasse velocidade e cambio na classe pai, ao encapsular, como eu iria fazer essa linha nas sub-classes:
this.velocidade += velocidadeAumentada;

Hmmm, e verdade.,… eu li cor e portas e entendi velocidade e cambio hehehe

Mas vc faria o que eu disse acima… vc deveria criar métodos protected ou, melhor ainda, cria-los private e usar metodos getters e setters, veja:

[code]
public class Carro{
private String cor;
private int portas;
private int velocidade = 0;
private int cambio = 0;

public Carro(String cor, int portas, int velocidade, int cambio) {
	this.cor = cor;
	this.portas = portas;
	this.velocidade = velocidade;
	this.cambio = cambio;
}

public String getCor() {
	return cor;
}

public int getPortas() {
	return portas;
}

public int getVelocidade() {
	return velocidade;
}

public int getCambio() {
	return cambio;
}

}[/code]

e no toString faria assim:

public String toString(){  
     return "A velocidade é "+getVelocidade() +" e a marcha atual é "+getCambio();  
}

Lembre-se de que você terá que sobrescrever os métodos getters e setters nas subclasses. Se não o fizer, o método toString irá retornar os valores herdados da superclasse.